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ü)
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...
Lambda ifadeleri farklı çeteleler topl...