溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中Lambda表達式的作用是什么

發(fā)布時間:2021-07-07 15:50:27 來源:億速云 閱讀:593 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關C#中Lambda表達式的作用是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據(jù)這篇文章可以有所收獲。

1. Lamdba 表達式是一個委托類型:

MethodInvoker invoker = () => { Console.WriteLine(); };  //is actually equal to the following form.    MethodInvoker invoker = delegate() { Console.WriteLine(); };  //這里是Lamdba 表達式的匿名委托的用法

2. Lamdba 表達式可以用作匿名方法

MethodInvoker invoker = new MethodInvoker(() => { Console.WriteLine(); });   //相當于:    MethodInvoker invoker = new MethodInvoker(MyFunc);    partial void MyFunc()    {      Console.WriteLine();    }

我們知道, 當構造一個新的委托的時候, 他的構造器需要一個函數(shù)指針作參數(shù),這個函數(shù)指針是委托類型的

實際上,當我們這樣去new 一個委托的時候:

MethodInvoker invoker = new MethodInvoker(MyFunc);

"MyFunc" 就是一個委托,而不只是一個函數(shù)名的存在. 編譯器將為這個構造函數(shù)生成一個匿名委托:

MethodInvoker invoker = new MethodInvoker(delegate() { MyFunc(); });

可以這樣理解編譯器的行為: 匿名方法其實也就是委托。

那么為什么我們可以這么寫呢:

MethodInvoker invoker = () => { Console.WriteLine(); };

我們來看一看:

首先,這個委托的構造器需要一個委托參數(shù),所以通常我們得這樣寫:

MethodInvoker invoker = new MethodInvoker(delegate() { MyFunc(); });

但是匿名的delegate 可以轉化成函數(shù)指針 (void() target):

所以這樣寫是可以的:

MethodInvoker invoker = new MethodInvoker(MyFunc);  //而匿名的委托又可以描述為Lambda表達式    MethodInvoker invoker = new MethodInvoker(() => { Console.WriteLine(); });  //另外一方面,由于編譯器對"寬松委托"的支持, MethodInvoker類委托可以轉化成匿名類委托:    MethodInvoker invoker = delegate() { Console.WriteLine(); };  //而匿名的委托又可以用Lambda表達式來描述    MethodInvoker invoker = () => { Console.WriteLine(); };

從上面,我們可以看到一個復雜的委托是如何轉化成簡潔的Lambda表達式的。這對程序員來說無疑又是提高生產力的一個體現(xiàn)!

看完上述內容,你們對C#中Lambda表達式的作用是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI