2011-04-21 13 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