Я дивлюся на компонент Gv MvcContrib і мене захоплює, але в той же час відштовхується синтаксичним трюком, який використовується в синтаксисі Grid :
.Attributes(style => "width:100%")
Синтаксис вище встановлює атрибут стилю створеного HTML width:100%
. Тепер, якщо ви звернете увагу, "стиль" ніде не вказаний, виводиться з назви параметра в виразі! Мені довелося розібратися в цьому і виявив, де відбувається "чарівництво":
Hash(params Func<object, TValue>[] hash)
{
foreach (var func in hash)
{
Add(func.Method.GetParameters()[0].Name, func(null));
}
}
Таким чином, код використовує формальний час компіляції та ім’я параметрів для створення словника пар атрибутів імен-значень. Отримана синтаксична конструкція справді дуже виразна, але в той же час дуже небезпечна. Загальне використання лямбда-виразів дозволяє замінити імена, що вживаються без побічного ефекту. Я бачу приклад у книзі, в якій сказано, що collection.ForEach(book => Fire.Burn(book))
я знаю, що можу написати у своєму коді, collection.ForEach(log => Fire.Burn(log))
і це означає те саме . Але з раптовим синтаксисом MvcContrib Grid я знаходжу код, який активно виглядає і приймає рішення на основі імен, які я обираю для своїх змінних!
Так це звичайна практика для спільноти C # 3.5 / 4.0 та любителів лямбдаських виразів? Або це шахрай, який не повинен хвилюватися?