亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C# Lambda 知識回顧

2019-10-29 21:15:52
字體:
來源:轉載
供稿:網友

C#,Lambda

它是第十一個希臘字母,一個擁有失意、無奈、孤獨、低調等含義的流行符號,也指示一款稱為“半年命”的游戲。

不過,這次我所講的是 C# 中的 Lambda。

目錄

  • Lambda 簡介
  • Lambda 表達式
  • Lambda 語句
  • 異步 Lambda
  • 在 LINQ 中使用 Lambda
  • Lambda 中的類型推斷
  • Lambda 中的變量使用范圍
  • Lambda 的特點

Lambda 簡介

Lambda 表達式,是一種簡化的匿名函數,可用于創建委托或表達式目錄樹。其次,你也可以將 Lambda 表達式作為參數進行傳遞,或者將它作用于函數調用值調用后返回的一個函數來使用。我們經常在 LINQ 中使用 Lambda 表達式。

創建 Lambda 表達式的簡單語法形式:輸入參數 => 表達式或語句塊。其中,=> 為 Lambda 運算符,可讀作“goes to” 。

delegate int MyDel(int x);  static void Main(string[] args)  {   MyDel myDel = x => x++;   var j = myDel(5);  }

創建表達式樹:

Expression<MyDel> myDel = x => x++;  

=> 運算符和 = 運算符 (賦值運算符),具有相同的優先級,并且都是右結合運算。

我們經常在 LINQ 查詢中使用 Lambda 表達式,如作為 Where<TSource> 的參數。該方法有多個重載,這里只列舉了其中一個。

//  // 摘要:   //  基于謂詞篩選值序列。  //  // 參數:   // source:  //  要篩選的 System.Collections.Generic.IEnumerable<T>。  //  // predicate:  //  用于測試每個元素是否滿足條件的函數。  //  // 類型參數:   // TSource:  //  source 中的元素的類型。  //  // 返回結果:   //  一個 System.Collections.Generic.IEnumerable<T>,包含輸入序列中滿足條件的元素。  //  // 異常:   // System.ArgumentNullException:  //  source 或 predicate 為 null。  public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

參數是委托類型 Func<TSource, bool> predicate),這里使用 Lambda 表達式進行創建我想應該是最合適的。還有,假如參數類型為抽象類的 System.Linq.Expressions.Expression<Func>,其中 Func 委托是重載具有十六個參數的,你也可以使用 Lambda 表達式創建對應的表達式樹。

【注意】在 is 或 as 運算符的左側不允許使用 Lambda 表達式。

 Lambda 表達式

表達式在 => 運算符右側,稱“lambda 表達式”。lambda 表達式常用于 LINQ 和構建表達式樹,它也允許返回結果。

基本形式:( 輸入參數 ) => 表達式 。

如:  

  ( ) => true;   x => x == 1;  (x) => x == 1;   (x, y) => x == y;

【備注】當 lambda 表達式有且只有一個輸入參數的時侯,括號(“()”)才是可選的。 括號內存在多個輸入參數時使用“,”進行分割。

 你也可以選擇顯式指定類型,一般只有在編譯器難以或無法準確推斷輸入類型的時候。

Func<int, int, bool> func = (int x, int y) => x == y;

這里使用空括號(“()”)指定零個輸入參數,并且可以在 Lambda 的主體包含一個或多個方法進行調用。

() => YourMethod()  

Lambda 語句

lambda 語句和上面的 lambda 表達式相比,只是多了個大括號(“{ }”)?!?/p>

基本形式:( 輸入參數 ) => { 表達式 } 。

lambda 語句的主體可以由任意數量的普通語句組成,不過,我們一般寫的語句不多(三個左右吧)。

delegate void MyDel(string s); // ...MyDel myDel = n => { var s = n + " Fanguzai!"; Console.WriteLine(s); }; myDel("Hi,");

異步 Lambda

通過 async 和 await 關鍵字,我們可以很簡單并快速的創建包含異步處理的 lambda 表達式和語句。

這里,我使用簡單的異步調用方式,編寫執行按鈕觸發的點擊事件,即調用異步方法 DoAsync。

public partial class Form1 : Form {  public Form1()  {   InitializeComponent();  }  private async void button1_Click(object sender, EventArgs e)  {   await DoAsync();  }  async Task DoAsync()  {   await Task.Delay(250);  } }

現在,簡化上面的的 Click 事件,并加上 async。

public partial class Form1 : Form {  public Form1()  {   InitializeComponent();   button1.Click += async (sender, e) =>   {    await DoAsync();   };  }  async Task DoAsync()  {   await Task.Delay(250);  } }

在 LINQ 中使用 Lambda

許多 LINQ 中的參數都是一種委托類型的參數,如 Func<T, TResult>,可以定義輸入參數以及返回類型。

public delegate TResult Func<TArg0, TResult>(TArg0 arg0)  

Func<int, bool> 表示:int 為輸入參數,bool 為返回值。

Func<int, int, bool> 表示:2個 int 為輸入參數,一個 bool 為返回值。

示例:

Func<int, bool> myFunc = x => x == 250; var result = myFunc(1314); 

C# 的編譯器可以自動推斷輸入參數的類型,即便是多個輸入參數,當然,你也可以選擇顯式指定。

var nums = new[] { 2, 5, 0 };var query = nums.Count(x => x > 2);var query2 = nums.Count<int>(x => x < 2);

【備注】不要將 => 和 >= 搞錯了,前者是 Lambda 運算符,后者是算術比較運算符。

Lambda 中的類型推斷

編譯器會根據 Lambda 主體、參數的委托類型以及 C# 語言規范和其它等一些因素,對我們所寫的 Lambda 進行類型推斷。

C#,Lambda

在這里,由于源數據是一個 int 數組,即我要查的數據為 IEnumerable<int> 類型,編譯器在這里自動推斷元素為 int 類型,意味著 Count 方法內的 x 你可以通過 “.” 在 VS 中顯示對應 int 類型的屬性和方法。

Lambda 中的變量使用范圍

我們可以在 Lambda 的主體中引用范圍之外的變量。如:

var nums = new[] { 2, 5, 0 }; //int[] 類型var compareNum = 2.5;var query = nums.Count(x => x == compareNum); 

Lambda 的特點

  • Lambda 中包含輸入參數的數量,必須與委托類型包含的參數數量一致。
  • Lambda 中的每個輸入參數,必須都能夠通過隱式轉換為其對應的委托參數類型。
  • Lambda 中的返回值(如果有),必須能夠隱式轉換為委托的返回類型。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持VEVB武林網!


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美日韩综合精品| 日韩av黄色在线观看| 久久久av一区| 91av成人在线| 久久久久www| 欧美成人免费全部观看天天性色| 日韩专区中文字幕| 国产精品天天狠天天看| 欧美日韩国产第一页| 亚洲图片欧洲图片av| 欧美性猛交xxxx乱大交蜜桃| 成人h视频在线观看播放| 日韩精品久久久久| 国产精品高潮呻吟久久av黑人| 国产福利视频一区二区| 中文字幕日韩精品在线观看| 九九热这里只有精品6| 精品国产福利在线| 欧美日韩一区二区免费视频| 麻豆国产va免费精品高清在线| 7m第一福利500精品视频| 国产91在线视频| 一区二区三区视频免费在线观看| 久久天天躁狠狠躁夜夜躁| 欧美国产日本在线| 日韩高清电影免费观看完整版| 日韩av在线网址| 欧美日韩一区二区三区在线免费观看| 亚洲国产精品福利| 91久久国产综合久久91精品网站| 精品免费在线观看| 国产精品欧美一区二区三区奶水| 国产女人18毛片水18精品| 中文在线资源观看视频网站免费不卡| 国产精品自拍视频| 欧美成人免费在线观看| 久久久电影免费观看完整版| 91福利视频在线观看| 91在线视频成人| 久久中国妇女中文字幕| 国产精品久久久久久久久免费| 欧美午夜视频在线观看| 精品亚洲夜色av98在线观看| 亚洲第一页在线| 亚洲成年网站在线观看| 欧美成年人视频| 国产成人一区二| 国产精品www色诱视频| 日韩成人在线免费观看| 国产精品美女主播| 国产日韩中文字幕| 欧美日韩国产成人在线| 91九色国产社区在线观看| 久久综合久久八八| 原创国产精品91| 日韩精品小视频| 有码中文亚洲精品| 久久国产精品免费视频| 性欧美视频videos6一9| 91色中文字幕| 亚洲性生活视频| 日韩免费在线视频| 欧美日韩中国免费专区在线看| 亚洲激情在线视频| 亚洲国产精品系列| 91久久国产综合久久91精品网站| 国产精品盗摄久久久| 欧美丰满老妇厨房牲生活| 丝袜亚洲另类欧美重口| 亚洲经典中文字幕| 欧美激情乱人伦一区| 欧美精品久久一区二区| 亚洲美女视频网| 国产成人精品在线| 一本大道香蕉久在线播放29| 亚洲欧洲免费视频| 久久久亚洲影院| 久久影视电视剧免费网站| 欧美大片va欧美在线播放| 国产精品扒开腿爽爽爽视频| 精品久久香蕉国产线看观看gif| 九九久久国产精品| 亚洲精品成人网| 亚洲精品成人网| 国产国产精品人在线视| 1769国内精品视频在线播放| 中文综合在线观看| 国产午夜精品视频免费不卡69堂| 欧美日韩国产一区中文午夜| 亚洲欧洲一区二区三区在线观看| 欧美性猛交xxxx黑人猛交| yw.139尤物在线精品视频| 国产97人人超碰caoprom| 国产精品久久久久久五月尺| 欧美成人免费va影院高清| 亚洲成人激情在线观看| 久久久精品日本| 97国产精品人人爽人人做| 亚洲精品自在久久| 91av网站在线播放| 国产精品久久久久久av福利| 亚洲午夜精品视频| 精品久久久久久中文字幕| 久久精品男人天堂| 91久久精品国产91久久性色| 日韩激情视频在线播放| 亚洲精品日韩av| 一本色道久久综合狠狠躁篇怎么玩| 黄网站色欧美视频| 欧美激情第一页xxx| 欧美亚洲国产成人精品| 伊人久久综合97精品| 欧美日韩在线看| 国产精国产精品| 久久视频在线免费观看| 国产精品久久二区| 欧美裸体男粗大视频在线观看| 亚洲精品一区中文字幕乱码| 国产精品十八以下禁看| 97在线免费视频| 久久久国产精品视频| 欧美日韩美女视频| 欧美激情视频一区二区| 日韩成人中文电影| 久久亚洲一区二区三区四区五区高| www.精品av.com| 国产精品视频成人| 国产精品色悠悠| 影音先锋欧美在线资源| 日韩美女免费视频| 欧美日韩国产一中文字不卡| 亚洲欧美日韩一区二区三区在线| 欧美久久精品午夜青青大伊人| 性欧美xxxx视频在线观看| 日韩免费在线看| 91在线观看欧美日韩| 国产区亚洲区欧美区| 成人欧美一区二区三区黑人孕妇| 国产福利精品视频| 精品久久久999| 欧美日韩国产麻豆| 欧美国产日韩在线| 国产精品jizz在线观看麻豆| 欧美精品成人91久久久久久久| 高清视频欧美一级| 精品久久中文字幕| 91精品在线影院| 最近中文字幕日韩精品| 成人午夜激情免费视频| 日本一区二区不卡| 成人黄色av免费在线观看| 成人免费视频97| 国内成人精品视频| 久热精品在线视频| 国产99久久精品一区二区永久免费| 欧美日韩国产成人高清视频| 成人一区二区电影| 国产丝袜一区二区三区免费视频| 国产精品久久久999| 一区二区三区久久精品| 91丝袜美腿美女视频网站| www.久久草.com| 欧美精品久久久久久久| 欧美日本在线视频中文字字幕|