Patrzę na składnik MvcContrib Grid i jestem zafascynowany, ale jednocześnie odparty, przez sztuczkę składniową zastosowaną w składni Grid :
.Attributes(style => "width:100%")
Powyższa składnia ustawia atrybut stylu wygenerowanego HTML na width:100%
. Teraz, jeśli zwrócisz uwagę, „styl” nigdzie nie jest określony, wywnioskuje się z nazwy parametru w wyrażeniu! Musiałem się w to zagłębić i odkryłem, gdzie dzieje się „magia”:
Hash(params Func<object, TValue>[] hash)
{
foreach (var func in hash)
{
Add(func.Method.GetParameters()[0].Name, func(null));
}
}
W rzeczy samej, kod używa formalnej, czas kompilacji, nazwy parametrów do stworzenia słownika par nazwa-wartość atrybutu. Wynikowa konstrukcja składni jest rzeczywiście bardzo ekspresyjna, ale jednocześnie bardzo niebezpieczna. Ogólne użycie wyrażeń lambda pozwala na zastąpienie używanych nazw bez skutków ubocznych. Widzę przykład w książce, który mówi, collection.ForEach(book => Fire.Burn(book))
że wiem, że mogę pisać w moim kodzie, collection.ForEach(log => Fire.Burn(log))
a to oznacza to samo . Ale dzięki składni MvcContrib Grid nagle znajduję kod, który aktywnie wyszukuje i podejmuje decyzje na podstawie nazw wybranych dla moich zmiennych!
Czy więc jest to powszechna praktyka w społeczności C # 3.5 / 4.0 i miłośnikach wyrażeń lambda? A może jest nieuczciwym indywidualistą, którego nie powinienem się martwić?