lambda高級查詢
- 2020 年 6 月 29 日
- 筆記
1. 什麼是lambda表達式
Lambda 表達式,是一種簡化的匿名函數,可用於創建委託或表達式目錄樹。
其次,也可以將 Lambda 表達式作為參數進行傳遞,或者將它作用於函數調用值調用後返回的一個函數來使用。 經常在 LINQ 中使用 Lambda 表達式。
2. Lambda的組成
3. Lambda表達式
表達式在 => 運算符右側,稱「lambda 表達式」。lambda 表達式常用於 LINQ 和構建表達式樹,它也允許返回結果。
基本形式:( 輸入參數 ) => 表達式 。
1) ( ) => true;
2) x => x == 1;
3) (x) => x == 1;
4) (x, y) => x == y;
當 lambda 表達式有且只有一個輸入參數的時侯,括弧(「()」)才是可選的。 括弧記憶體在多個輸入參數時使用「,」進行分割。
也可以選擇顯式指定類型,一般只有在編譯器難以或無法準確推斷輸入類型的時候。
4. Lambda語句
lambda 語句和上面的 lambda 表達式相比,只是多了個大括弧(「{ }」)。
基本形式:( 輸入參數 ) => { 表達式 } 。
5. 非同步Lambda
通過 async 和 await 關鍵字,我們可以很簡單並快速的創建包含非同步處理的 lambda 表達式和語句。
1) Async
2) Await
6. 在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 為返回值。
示例:
1) Func<int, bool> myFunc = x => x == 250;
2) var result = myFunc(1314);
C# 的編譯器可以自動推斷輸入參數的類型,即便是多個輸入參數,當然,也可以選擇顯式指定。
1) var nums = new[] { 2, 5, 0 };
2) var query = nums.Count(x => x > 2);
3) var query2 = nums.Count<int>(x => x < 2);
7. Lambda中的類型推斷
編譯器會根據 Lambda 主體、參數的委託類型以及 C# 語言規範和其它等一些因素,對所寫的 Lambda 進行類型推斷。
由於源數據是一個 int 數組,即我要查的數據為 IEnumerable<int> 類型,編譯器在這裡自動推斷元素為 int 類型,
意味著 Count 方法內的 x 你可以通過 「.」 在 VS 中顯示對應 int 類型的屬性和方法。
8. Lambda的特點
1) Lambda 中包含輸入參數的數量,必須與委託類型包含的參數數量一致。
2) Lambda 中的每個輸入參數,必須都能夠通過隱式轉換為其對應的委託參數類型
3) Lambda 中的返回值(如果有),必須能夠隱式轉換為委託的返回類型
喜歡的可以點個贊!