自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

.NET Lambda表達式的寫法

Lambda表達式在C#中的寫法是“arg-list => expr-body”,“=>”符號左邊為表達式的參數(shù)列表,右邊則是表達式體(body)。參數(shù)列表可以包含0到多個參數(shù),參數(shù)之間使用逗號分割。例如,以下便是一個使用Lambda表達式定義了委托的示例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表達式的作用也是為了定義一個匿名方法。因此,下面使用delegate的代碼和上面是等價的:

  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表達式的意義

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

  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ù)之前的類型信息。這個特性叫做“類型推演”,也就是指編譯器可以自動知道某些成員的類型2。請不要輕易認為這個小小的改進意義不大,事實上,您會發(fā)現(xiàn)Lambda表達式的優(yōu)勢都是由這一點一滴的細節(jié)構(gòu)成的。那么我們再來一次改變:

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

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

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

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

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

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

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

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

.NET Lambda表達式范例:字符串列表

.NET Lambda表達式范例:索引功能

【編輯推薦】

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

2010-09-14 14:05:42

C#委托

2011-05-20 17:50:45

C#

2010-01-05 14:45:58

.NET Framew

2009-08-10 17:11:34

.NET 3.5擴展方Lambda表達式

2009-08-31 17:11:37

Lambda表達式

2013-04-10 10:58:19

LambdaC#

2009-09-11 09:48:27

Linq Lambda

2009-09-09 13:01:33

LINQ Lambda

2009-09-15 15:18:00

Linq Lambda

2022-12-05 09:31:51

接口lambda表達式

2021-06-08 07:48:26

lambda表達式編譯器

2023-11-02 08:25:58

C++Lambda

2009-08-10 10:06:10

.NET Lambda

2012-06-26 10:03:58

JavaJava 8lambda

2009-08-27 09:44:59

C# Lambda表達

2009-09-17 10:40:22

Linq Lambda

2009-09-15 17:30:00

Linq Lambda

2009-09-17 09:44:54

Linq Lambda

2023-09-25 13:28:14

C++Lambda

2009-04-29 09:05:59

Lambda抽象代表.NET
點贊
收藏

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