您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關C#中Lambda表達式的作用是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
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(); }
我們知道, 當構造一個新的委托的時候, 他的構造器需要一個函數指針作參數,這個函數指針是委托類型的
實際上,當我們這樣去new 一個委托的時候:
MethodInvoker invoker = new MethodInvoker(MyFunc);
"MyFunc" 就是一個委托,而不只是一個函數名的存在. 編譯器將為這個構造函數生成一個匿名委托:
MethodInvoker invoker = new MethodInvoker(delegate() { MyFunc(); });
可以這樣理解編譯器的行為: 匿名方法其實也就是委托。
那么為什么我們可以這么寫呢:
MethodInvoker invoker = () => { Console.WriteLine(); };
我們來看一看:
首先,這個委托的構造器需要一個委托參數,所以通常我們得這樣寫:
MethodInvoker invoker = new MethodInvoker(delegate() { MyFunc(); });
但是匿名的delegate 可以轉化成函數指針 (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表達式的。這對程序員來說無疑又是提高生產力的一個體現!
看完上述內容,你們對C#中Lambda表達式的作用是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。