MvcContrib Grid bileşenine bakıyorum ve Grid sözdiziminde kullanılan sözdizimsel bir hile ile hayran kaldım, ama aynı zamanda püskürttüm :
.Attributes(style => "width:100%")
Yukarıdaki sözdizimi, oluşturulan HTML'nin stil niteliğini ayarlar width:100%
. Şimdi dikkat ederseniz, 'stil' hiçbir yerde belirtilmez, ifadedeki parametrenin adından çıkarılır ! Bunu kazmak zorunda kaldım ve 'büyünün' nerede olduğunu buldum:
Hash(params Func<object, TValue>[] hash)
{
foreach (var func in hash)
{
Add(func.Method.GetParameters()[0].Name, func(null));
}
}
Aslında, kod öznitelik ad-değer çiftlerinin sözlüğünü oluşturmak için resmi, derleme zamanı, parametrelerin adını kullanıyor. Ortaya çıkan sözdizimi yapısı gerçekten çok etkileyici, ama aynı zamanda çok tehlikelidir. Lambda ifadelerinin genel kullanımı, yan etki olmadan kullanılan adların değiştirilmesine izin verir . Yazan bir kitapta bir örneğini görmek collection.ForEach(book => Fire.Burn(book))
benim kodunda yazabilirim biliyorum collection.ForEach(log => Fire.Burn(log))
ve aynı şeyi ifade . Ama burada MvcContrib Grid sözdizimi ile birdenbire, değişkenlerim için seçtiğim isimlere göre aktif olarak görünen ve kararlar veren kodu buluyorum!
Peki C # 3.5 / 4.0 topluluğu ve lambda ifadeleri sevenler ile bu ortak uygulama mı? Yoksa endişelenmemem gereken hileli bir hile mi?