请指导我获取以下行c#lambda表达式代码

时间:2011-04-21 14:40:47

标签: c# lambda anonymous-methods

<%= MyClass.GetData(() => new[] { Html.TextBox(prefix + "Postcode", Customer.ZipCode, new { maxlength = 7 }), Html.ValidationIcon(prefix + "ZipCode") })%>

有人可以解释一下MyClass.GetData方法作为参数传递的内容吗?

我不期待一个完整的解释,我知道我应该进一步学习anonyous方法和lamda表达式...但是现在你能解释一下代码是什么来自“()=&gt; .... ......“意味着什么?

如果你知道一些很好的文章,建立在理解这样的材料上会很酷!

3 个答案:

答案 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 }}