Parametre adı yansıtan: C kötüye lambda ifadeleri ya da Sözdizimi brilliance?
MvcContrib Grid bileşeni bakıyorum ve, sözdizimsel bir numara Grid syntax kullanılan ama aynı zamanda hem de hayran oldum:
.Attributes(style => "width:100%")
Sözdizimi yukarıda width:100%
tarzı oluşturulan HTML öznitelik ayarlar. Şimdi Eğer dikkat ederseniz, 'stil' hiçbir yerde belirtilmediği, bu durumda anlaşılanadıBu parametre ifadesi! Nerede bu içine kazmak ve bulduğumu 'magic' olur:
Hash(params Func<object, TValue>[] hash)
{
foreach (var func in hash)
{
Add(func.Method.GetParameters()[0].Name, func(null));
}
}
Yani gerçekten, kod parametreleri, derleme zamanı resmi, adı özniteliği sözlük-değer adını çift oluşturmak için kullanıyor. Neden sözdizimi çok etkileyici gerçekten, ama aynı zamanda çok tehlikeli bir yapı. Lambda ifadeleri genel kullanım değiştirilmesini sağlarisimleryan etkisi olmadan kullanılıyor. collection.ForEach(book => Fire.Burn(book))
yazan bir kitapta bir örnek benim kod yazmak biliyorum görüyorum collection.ForEach(log => Fire.Burn(log))
veaynı şey demektir. Ama MvcContrib Kılavuz sözdizimi ile burada birden aktif ve decissions benim değişkenler için seçtiğim adlarına göre görünür hale getiren bir kod buldum.
Yani bu# 3.5/4.0 toplum ve lambda ifadeleri aşıklar C ile yaygın bir uygulamadır? Ya da sahte bir endişe etmemem maverick numara mı?
CEVAP
Çok değil, çünkü bunu garip buluyorumadıama çünkülambda gereksizdir; anonim bir kullanım ve daha esnek olabilir
.Attributes(new { style = "width:100%", @class="foo", blip=123 });
Bu bir desen kullanılan çok ASP.NET MVC (örneğin), ve other uses caveat, not da Ayende's thoughts eğer ismi bir büyü değeri yerine arayanın özgü)
Neden lambda expression düz bir Temsil...
Arkasında(lambda anahtar=:) sıralanmış...
VS hata ayıklama "hızlı izle"...
Derlenmiş C# Lambda İfadeleri Performa...
Nasıl Java 8 lambda parametre olarak a...