Отражение имени параметра: злоупотребление лямбда-выражениями C# или синтаксический блеск? [закрыто]C#

Место общения программистов C#
Ответить
Anonymous
 Отражение имени параметра: злоупотребление лямбда-выражениями C# или синтаксический блеск? [закрыто]

Сообщение Anonymous »

Я смотрю на компонент MvcContrib Grid, и меня восхищает, но в то же время отталкивает синтаксический трюк, используемый в синтаксисе Grid:

Код: Выделить всё

.Attributes(style => "width:100%")
Приведенный выше синтаксис устанавливает для атрибута стиля сгенерированного HTML значение width:100%. Теперь, если вы обратите внимание, «стиль» нигде не указан. Оно выводится из имени параметра в выражении! Мне пришлось покопаться в этом и найти, где происходит «волшебство»:

Код: Выделить всё

Hash(params Func[] 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 и любителей лямбда-выражений? Или мне не стоит беспокоиться о мошеннике с одним трюком?

Подробнее здесь: https://stackoverflow.com/questions/171 ... ax-brillia
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»