2011-04-21 52 views
3
<%= MyClass.GetData(() => new[] { Html.TextBox(prefix + "Postcode", Customer.ZipCode, new { maxlength = 7 }), Html.ValidationIcon(prefix + "ZipCode") })%> 

有人可以请解释我的MyClass.GetData方法是作为参数传递什么?请指导我获取以下行c#lambda表达式代码

我不指望一个完整的解释,我知道我应该进一步学习到anonyous方法和LAMDA表达......但现在你能解释一下代码从“()=> .... ...“的意思?

如果你知道,建立对理解材料这样,这将是很酷的一些不错的文章!

回答

5

的()=>新[] {...}是λ表达式,其是用于匿名委托短手语法。这意味着,要传递的指针的基本上等同于不带参数的函数时,()部分表示的参数,和在{}括号(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); 

PS这里有一个良好的基础拉姆达教程:http://blogs.msdn.com/b/ericwhite/archive/2006/10/03/lambda-expressions.aspx

+0

你也可以把它作为一个回调 – tster 2011-04-21 14:48:22

2

() =>意味着不带任何参数的拉姆达。那么,你是突入GetData拉姆达不带参数,并返回一个新的数组。

2

这意味着:下面是一个anonymous delegate不带参数,并返回对象的数组,其类型将是从Html.TextBox()Html.ValidationIcon()返回值inferred

+3

+1我妈妈就能够明白这一点,更多的还是在英语不太:) – Bazzz 2011-04-21 14:54:25

+0

? hahahhaa7u :) – 2011-04-21 14:54:51