偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

使用.NET Lambda表達(dá)式實(shí)現(xiàn)委托

開發(fā) 后端
本文介紹了如何使用.NET Lambda表達(dá)式實(shí)現(xiàn)委托。當(dāng)然,Lambda表達(dá)式也并不是可以完全替代delegate寫法。不過,Lambda表達(dá)式可以大大簡化代碼的寫法。

.NET Lambda表達(dá)式的寫法

Lambda表達(dá)式在C#中的寫法是“arg-list => expr-body”,“=>”符號(hào)左邊為表達(dá)式的參數(shù)列表,右邊則是表達(dá)式體(body)。參數(shù)列表可以包含0到多個(gè)參數(shù),參數(shù)之間使用逗號(hào)分割。例如,以下便是一個(gè)使用Lambda表達(dá)式定義了委托的示例1:

  1. Func< intintint> max = (int a, int b) =>  
  2. {  
  3.     if (a > b)  
  4.     {  
  5.         return a;  
  6.     }  
  7.     else 
  8.     {  
  9.         return b;  
  10.     }  
  11. };  

與上文使用delegate定義匿名方法的作用相同,Lambda表達(dá)式的作用也是為了定義一個(gè)匿名方法。因此,下面使用delegate的代碼和上面是等價(jià)的:

  1. Func< intintint> max = delegate(int a, int b)  
  2. {  
  3.     if (a > b)  
  4.     {  
  5.         return a;  
  6.     }  
  7.     else 
  8.     {  
  9.         return b;  
  10.     }  
  11. };  

.NET Lambda表達(dá)式的意義

那么您可能就會(huì)問,這樣看來Lambda表達(dá)式又有什么意義呢?Lambda表達(dá)式的意義便是它可以寫的非常簡單,例如之前的Lambda表達(dá)式可以簡寫成這樣:

  1. Func< intintint> max = (a, b) =>  
  2. {  
  3.     if (a > b)  
  4.     {  
  5.         return a;  
  6.     }  
  7.     else 
  8.     {  
  9.         return b;  
  10.     }  
  11. };  

由于我們已經(jīng)注明max的類型是Func< int, int, int>,因此C#編譯器可以明確地知道a和b都是int類型,于是我們就可以省下參數(shù)之前的類型信息。這個(gè)特性叫做“類型推演”,也就是指編譯器可以自動(dòng)知道某些成員的類型2。請(qǐng)不要輕易認(rèn)為這個(gè)小小的改進(jìn)意義不大,事實(shí)上,您會(huì)發(fā)現(xiàn)Lambda表達(dá)式的優(yōu)勢都是由這一點(diǎn)一滴的細(xì)節(jié)構(gòu)成的。那么我們?cè)賮硪淮胃淖儯?/P>

  1. Func< intintint> max = (a, b) => a > b ? a : b;  

如果Lambda表達(dá)式的body是一個(gè)表達(dá)式(expression),而不是語句(statement)的話,那么它的body就可以省略大括號(hào)和return關(guān)鍵字。此外,如果Lambda表達(dá)式只包含一個(gè)參數(shù)的話,則參數(shù)列表的括號(hào)也可以省略,如下:

  1. Func< intbool> positive = a => a > 0;  

如今的寫法是不是非常簡單?那么我們來看看,如果是使用delegate關(guān)鍵字來創(chuàng)建的話會(huì)成為什么樣子:

  1. Func< intbool> positive = delegate(int a)  
  2. {  
  3.     return a > 0;  
  4. };  

您馬上就可以意識(shí)到,這一行和多行的區(qū)別,這幾個(gè)關(guān)鍵字和括號(hào)的省略,會(huì)使得編程世界一下子變得大為不同。

當(dāng)然,Lambda表達(dá)式也并不是可以完全替代delegate寫法,例如帶ref和out關(guān)鍵字的匿名方法,就必須使用.NET 2.0中的delegate才能構(gòu)造出來了。

以上就介紹了.NET Lambda表達(dá)式實(shí)現(xiàn)委托的方法。

.NET Lambda表達(dá)式范例:字符串列表

.NET Lambda表達(dá)式范例:索引功能

【編輯推薦】

  1. 各版本.NET委托的寫法回顧
  2. C# Actor模型開發(fā)實(shí)例:網(wǎng)絡(luò)爬蟲
  3. 強(qiáng)類型和Actor:ActorLite的演示
  4. C#的Tag Message回顧:繁瑣而危險(xiǎn)
  5. Erlang的Actor回顧:將消息轉(zhuǎn)化為邏輯執(zhí)行
責(zé)任編輯:yangsai 來源: 老趙點(diǎn)滴
相關(guān)推薦

2011-05-20 17:50:45

C#

2010-09-14 14:05:42

C#委托

2010-01-05 14:45:58

.NET Framew

2009-08-10 17:11:34

.NET 3.5擴(kuò)展方Lambda表達(dá)式

2013-04-10 10:58:19

LambdaC#

2009-08-31 17:11:37

Lambda表達(dá)式

2009-09-09 13:01:33

LINQ Lambda

2009-09-15 15:18:00

Linq Lambda

2022-12-05 09:31:51

接口lambda表達(dá)式

2009-09-11 09:48:27

Linq Lambda

2021-06-08 07:48:26

lambda表達(dá)式編譯器

2023-11-02 08:25:58

C++Lambda

2009-08-10 10:06:10

.NET Lambda

2009-08-27 09:44:59

C# Lambda表達(dá)

2009-09-15 17:30:00

Linq Lambda

2009-09-17 09:44:54

Linq Lambda

2009-09-17 10:40:22

Linq Lambda

2012-06-26 10:03:58

JavaJava 8lambda

2009-04-29 09:05:59

Lambda抽象代表.NET

2023-09-25 13:28:14

C++Lambda
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)