C#基础:Lambda表达式
從委托的角度來看,Lambda表達式與匿名方法沒有區別。在【C#基礎:匿名方法】一文中,我使用了匿名方法來調用List<T>的FindAll方法。從C# 3.0開始,在使用匿名方法的地方,完全可以用Lambda表達式來代替。Lambda表達式的定義方式為:“([參數列表]) => 表達式”。運算符“=>”是一種與賦值運算“=”具有相同優先級的右結合運算符,在英語里讀作:“goes to”。
現在回過頭來看我們的例子。下面的代碼與【C#基礎:匿名方法】一文中的代碼具有相同的效果:
view plaincopy to clipboardprint?上面的Lambda Expression Implementation在效果上與匿名方法沒有任何區別,“=>”左邊的name定義了參數(當參數個數為1的時候,圓括號可以省略),“=>”右邊定義執行體。由于C# 3.0編譯器具有Type Inference的能力,參數類型與返回值都將由編譯器通過上下文判定,因此與匿名方法不同,Lambda表達式的參數可以不給定參數類型。當所表示的匿名方法沒有任何參數時,Lambda表達式也同樣可以使用,只需在“=>”左邊用一對圓括號表示即可。即:
view plaincopy to clipboardprint?事實上,“Lambda表達式”這一詞比較籠統,事實上“=>”運算符既可以表示Lambda表達式,也可以表示Lambda語句。Lambda語句由代碼塊組成,形式上很像匿名方法。請看下面的例子:
view plaincopy to clipboardprint?兩種定義方法同樣可以正確地輸出結果。請注意,當我們希望構建表達式樹的時候,情況卻完全不同了:
view plaincopy to clipboardprint?由此可見,在構建表達式樹的時候,不能用Lambda語句(帶有代碼語句的Lambda表達式),而應該使用Lambda表達式。從這里就可以看出匿名方法與Lambda表達式的區別了。
有關委托的高級話題以及表達式樹的內容,我會在后面的文章中繼續研究。
總結
以上是生活随笔為你收集整理的C#基础:Lambda表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《我的成长》6月下2009年第7期(总第
- 下一篇: c# char unsigned_dll