成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

Lambda表達(dá)式在C#中的寫(xiě)法是“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ì)問(wèn),這樣看來(lái)Lambda表達(dá)式又有什么意義呢?Lambda表達(dá)式的意義便是它可以寫(xiě)的非常簡(jiǎn)單,例如之前的Lambda表達(dá)式可以簡(jiǎn)寫(xiě)成這樣:

  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)勢(shì)都是由這一點(diǎn)一滴的細(xì)節(jié)構(gòu)成的。那么我們?cè)賮?lái)一次改變:

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

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

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

如今的寫(xiě)法是不是非常簡(jiǎn)單?那么我們來(lái)看看,如果是使用delegate關(guān)鍵字來(lái)創(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寫(xiě)法,例如帶ref和out關(guān)鍵字的匿名方法,就必須使用.NET 2.0中的delegate才能構(gòu)造出來(lái)了。

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

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

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

【編輯推薦】

  1. 各版本.NET委托的寫(xiě)法回顧
  2. C# Actor模型開(kāi)發(fā)實(shí)例:網(wǎng)絡(luò)爬蟲(chóng)
  3. 強(qiáng)類型和Actor:ActorLite的演示
  4. C#的Tag Message回顧:繁瑣而危險(xiǎn)
  5. Erlang的Actor回顧:將消息轉(zhuǎn)化為邏輯執(zhí)行
責(zé)任編輯:yangsai 來(lái)源: 老趙點(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)

主站蜘蛛池模板: 亚洲精品9999| 亚洲三区视频 | 亚洲巨乳自拍在线视频 | 粉嫩国产精品一区二区在线观看 | 三级av在线| 在线看av的网址 | 国产成人一区二区 | 亚洲毛片网站 | 青青久草| www久久久 | 国产精品毛片无码 | 视频一二区 | 免费看片在线播放 | 欧美日韩在线免费 | 午夜国产一级 | 欧美一区二区三区在线观看 | 污污免费网站 | 国产精品久久久久久久久动漫 | 91精品国产一区二区三区 | 99热精品国产| 国产精品久久二区 | 精品av久久久久电影 | 久久久久综合 | 成人深夜福利在线观看 | 欧美黑人巨大videos精品 | 久久久久国产精品一区二区 | 91在线视频播放 | 最新黄色在线观看 | 三级在线视频 | 国产精品美女久久久久久免费 | 成人毛片在线视频 | 久久久久久久一区 | 日本在线看片 | 一区二区三区在线免费观看 | 在线日韩不卡 | 中文字幕国产 | 国产美女高潮 | 久久99精品久久久久久秒播九色 | 午夜激情在线视频 | 中文字幕av一区二区三区 | 九九视频在线观看视频6 |