您好,登錄后才能下訂單哦!
C#的Lambda表達式,如果你第一接觸這個專業術語,聽這個名字你完全不知道它是干嘛的。那問題就來了(放心不是去藍翔學挖掘機)。
它到底是什么呢?
說明這個問題需要借助代碼,給予簡單描述。代碼如下:
public delegate int deleArgu(int x);//委托 //... //... int y = 0; mydeleArgu=x=>{return x*x;};//這就是一個Lambda表達式。 y=mydeleArgu(5);//結果y=25;
由上面所看到的x=>{return x*x};這就是一個Lambda表達式,它其實就是一個匿名函數。那接下來的問題就出現了。
2.什么是匿名函數?
我也是借用幾行代碼說明,代碼如下:
public delegate int deleArgu(int x);//委托 mydeleArgu = delegate(int x){return x*x;}; Console.WriteLine(mydeleArgu(5));//輸出為25;
上面的代碼中mydeleArgu = delegate(int x){return x*x;};這就是一個匿名函數。這個事在.Net FrameWork 2.0后加入的概念。在.Net FrameWork 1.0的委托是把指針指向一個函數,那么名字叫什么,阿貓阿狗都無所謂了,名字不再重要,所以在這個地方提供了匿名方法。
3.Lambda表達式是怎么來的?
到了后來.Net Framework 3.5之后就更加的改進了,如下代碼:
public delegate String deleTransfer(string s); deleTransfer =s=>s.Substring(0,1).toUpper()+s.Substring(1).toLower();//首字母大寫,其他小寫 Console.WriteLine(deleTransfer("abdDEF"));//結果"Adbef"
上面的部分就是帶一個參數的Lambda表達式。是不是感覺它就是一個匿名方法?沒錯!它就是這樣的。
我們很快就看清Lambda表達式的發展脈絡,它是委托和匿名方法過渡而來的,和匿名方法很相似。
總結:(來自官方文檔)
=> 運算符具有與賦值運算符 (=) 相同的優先級并且是右結合運算(參見“運算符”文章的“結合性”部分)。
Lambda 在基于方法的 LINQ 查詢中用作標準查詢運算符方法(如 Where)的參數。
使用基于方法的語法在 Enumerable 類中調用 Where 方法時(如在 LINQ to Objects 和 LINQ to XML 中一樣),參數是委托類型 System.Func<T, TResult>。 使用 Lambda 表達式創建該委托最為方便。 例如,當你在 System.Linq.Queryable 類中調用相同的方法時(如在 LINQ to SQL 中一樣),參數類型為System.Linq.Expressions.Expression<Func>,其中 Func 是最多具有十六個輸入參數的任何一個 Func 委托。 同樣,Lambda 表達式只是一種非常簡潔的構造該表達式目錄樹的方式。 盡管事實上通過 Lambda 創建的對象具有不同的類型,但 Lambda 使得 Where 調用看起來類似。
在上一個示例中,請注意委托簽名具有一個 int 類型的隱式類型輸入參數,并返回 int。 可以將 Lambda 表達式轉換為該類型的委托,因為該表達式也具有一個輸入參數 (x),以及一個編譯器可隱式轉換為 int 類型的返回值。(以下幾節中將對類型推理進行詳細討論。)使用輸入參數 5 調用委托時,它將返回結果 25。在 is 或 as 運算符的左側不允許使用 Lambda。適用于匿名方法的所有限制也適用于 Lambda 表達式
表達式位于 => 運算符右側的 lambda 表達式稱為“表達式 lambda”。 表達式 lambda 廣泛用于表達式樹(C# 和 Visual Basic)的構造。 表達式 lambda 會返回表達式的結果,并采用以下基本形式:
(input parameters) => expression;
語句 lambda 與表達式 lambda 表達式類似,只是語句括在大括號中:
(input parameters) => {statement;};
更多信息查詢官方文檔。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。