日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#基础:Lambda表达式

發布時間:2023/12/19 C# 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#基础:Lambda表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從委托的角度來看,Lambda表達式與匿名方法沒有區別。在【C#基礎:匿名方法】一文中,我使用了匿名方法來調用List<T>的FindAll方法。從C# 3.0開始,在使用匿名方法的地方,完全可以用Lambda表達式來代替。Lambda表達式的定義方式為:“([參數列表]) => 表達式”。運算符“=>”是一種與賦值運算“=”具有相同優先級的右結合運算符,在英語里讀作:“goes to”。

現在回過頭來看我們的例子。下面的代碼與【C#基礎:匿名方法】一文中的代碼具有相同的效果:

view plaincopy to clipboardprint?
  • class?Program ??
  • { ??
  • ????static?void?Main(string[]?args) ??
  • ????{ ??
  • ????????List<string>?names?=?new?List<string>(); ??
  • ????????names.Add("Sunny?Chen"); ??
  • ????????names.Add("Kitty?Wang"); ??
  • ????????names.Add("Sunny?Crystal"); ??
  • ??
  • ????????List<string>?found?=?names.FindAll ??
  • ????????????( ??
  • ????????????//?Lambda?Expression?Implementation ??
  • ????????????name?=>?name.StartsWith( ??
  • ????????????????"sunny",? ??
  • ????????????????StringComparison.OrdinalIgnoreCase) ??
  • ????????????); ??
  • ??
  • ????????if?(found?!=?null) ??
  • ????????{ ??
  • ????????????foreach?(string?str?in?found) ??
  • ????????????????Console.WriteLine(str); ??
  • ????????} ??
  • ????} ??
  • } ??
  • 上面的Lambda Expression Implementation在效果上與匿名方法沒有任何區別,“=>”左邊的name定義了參數(當參數個數為1的時候,圓括號可以省略),“=>”右邊定義執行體。由于C# 3.0編譯器具有Type Inference的能力,參數類型與返回值都將由編譯器通過上下文判定,因此與匿名方法不同,Lambda表達式的參數可以不給定參數類型。當所表示的匿名方法沒有任何參數時,Lambda表達式也同樣可以使用,只需在“=>”左邊用一對圓括號表示即可。即:

    view plaincopy to clipboardprint?
  • ()?=>?Console.WriteLine("Hello!"); ??
  • 事實上,“Lambda表達式”這一詞比較籠統,事實上“=>”運算符既可以表示Lambda表達式,也可以表示Lambda語句。Lambda語句由代碼塊組成,形式上很像匿名方法。請看下面的例子:

    view plaincopy to clipboardprint?
  • class?Program ??
  • { ??
  • ????static?void?Main(string[]?args) ??
  • ????{ ??
  • ????????//?Lambda?表達式 ??
  • ????????Func<int,?bool>?dele1?=?n?=>?n?>?10; ??
  • ????????//?Lambda?語句 ??
  • ????????Func<int,?bool>?dele2?=?(int?n)?=>?{?return?n?>?10;?}; ??
  • ????????Console.WriteLine(dele1(16)); ??
  • ????????Console.WriteLine(dele1(8)); ??
  • ????} ??
  • } ??
  • 兩種定義方法同樣可以正確地輸出結果。請注意,當我們希望構建表達式樹的時候,情況卻完全不同了:

    view plaincopy to clipboardprint?
  • //?ok ??
  • Expression<Func<int,?bool>>?expr1?=?n?=>?n?>?10; ??
  • //?error:?cannot?converted?to?an?expression?tree ??
  • Expression<Func<int,?bool>>?expr2?=?(int?n)?=>?{?return?n?>?10;?}; ??
  • 由此可見,在構建表達式樹的時候,不能用Lambda語句(帶有代碼語句的Lambda表達式),而應該使用Lambda表達式。從這里就可以看出匿名方法與Lambda表達式的區別了。

    有關委托的高級話題以及表達式樹的內容,我會在后面的文章中繼續研究。

    總結

    以上是生活随笔為你收集整理的C#基础:Lambda表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。