<%= MyClass.GetData(() => new[] { Html.TextBox(prefix + "Postcode", Customer.ZipCode, new { maxlength = 7 }), Html.ValidationIcon(prefix + "ZipCode") })%>
有人可以解释一下MyClass.GetData方法作为参数传递的内容吗?
我不期待一个完整的解释,我知道我应该进一步学习anonyous方法和lamda表达式...但是现在你能解释一下代码是什么来自“()=&gt; .... ......“意味着什么?
如果你知道一些很好的文章,建立在理解这样的材料上会很酷!
答案 0 :(得分:5)
()=&gt; new [] {...}是一个lambda表达式,它是匿名委托的简写语法。这意味着你传递的函数实际上相当于一个不带参数的函数的指针,()部分表示参数,并在{}大括号(Html.TextBox ....等)中返回结果。
基本上,这相当于传递一个完成同样事情的方法名称,但它的语法更简洁:
MyClass.GetData(() => new[] { Html.TextBox(prefix + "Postcode", Customer.ZipCode, new { maxlength = 7 }), Html.ValidationIcon(prefix + "ZipCode") }
与创建方法大致相同,然后将该方法名称传递给。
private WebControl[] GetControls()
{
return new[] { Html.TextBox(prefix + "Postcode", Customer.ZipCode, new { maxlength = 7 }), Html.ValidationIcon(prefix + "ZipCode");
}
...
MyClass.GetData(GetControls);
P.S。这是一个很好的基本lambda教程:http://blogs.msdn.com/b/ericwhite/archive/2006/10/03/lambda-expressions.aspx
答案 1 :(得分:2)
() =>
表示不带任何参数的lambda。所以你要传递GetData
一个不带参数的lambda并返回一个新数组。
答案 2 :(得分:2)
这意味着:这是一个anonymous delegate,它不接受任何参数,并返回一个对象数组,其类型为Html.TextBox()
和{{1}的返回值inferred }}