我正在查看MvcContrib Grid 组件,我很着迷,但同时又被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));
}
}
所以确实,代码使用正式的、编译时的、参数名称来创建属性名称-值对的字典。由此产生的语法结构确实非常具有表现力,但同时也非常危险。
lambda 表达式的一般使用允许替换使用的名称而不会产生副作用。我在一本书中看到一个例子,它说collection.ForEach(book => Fire.Burn(book))
我知道我可以在我的代码中编写collection.ForEach(log => Fire.Burn(log))
,这意味着同样的事情。但是突然之间有了 MvcContrib Grid 语法,我发现代码可以根据我为变量选择的名称主动查找和做出决定!
那么对于 C# 3.5/4.0 社区和 lambda 表达式爱好者来说,这是一种常见的做法吗?还是流氓是我不应该担心的特立独行?