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

C# Lambda表達(dá)式學(xué)習(xí)筆記

開發(fā) 后端
這里介紹C# Lambda表達(dá)式,它實(shí)際上和匿名方法沒有什么不同。Lambda的輸入?yún)?shù)就對(duì)應(yīng)著delegate括號(hào)里面的參數(shù),由于C# Lambda表達(dá)式可以推斷參數(shù)的類型,所以這里的參數(shù)無需聲明。

C#語言還是比較常見的東西,這里我們主要介紹C# Lambda表達(dá)式,包括介紹一個(gè)Lambda就是一個(gè)delegate,一個(gè)delegate指向一個(gè)方法等方面。

你有沒有接觸過C# Lambda表達(dá)式,有沒有覺得匿名方法這東西很不錯(cuò),減少了很多代碼阿,但是匿名方法的使用還并不人性化,什么是人性化呢?比如你可以用自然的語言將程序代碼讀出來,這樣才算人性化了。在.net 2.0中System.Collections.Generic命名空間下List里有一些新增的方法。比如Find,如果使用匿名方法我們?nèi)绾握{(diào)用呢:

  1. books.Find(delegate(Book book){return book.Price < 50;}); 

代碼是很簡單,但是卻無法朗讀出來,來看看C# Lambda表達(dá)式的寫法:

books.Find(book=>book.Price<50);這個(gè)C# Lambda表達(dá)式就可以這樣閱讀出來了:給你一本書,如果它的價(jià)格小于50則返回true。

好了,那我們就走進(jìn)C# Lambda表達(dá)式吧:

C# Lambda表達(dá)式

將使用了C# Lambda表達(dá)式的程序集反編譯后,我們發(fā)現(xiàn),它實(shí)際上和匿名方法沒有什么不同。Lambda的輸入?yún)?shù)就對(duì)應(yīng)著delegate括號(hào)里面的參數(shù),由于C# Lambda表達(dá)式可以推斷參數(shù)的類型,所以這里的參數(shù)無需聲明。

Lambda操作符讀作”Goes to”,它后面緊跟著表達(dá)式或者是語句塊(這點(diǎn)和匿名方法也不同,匿名方法只能使用語句塊而不能使用表達(dá)式),下面我就用實(shí)例來說明一下有那些類型的C# Lambda表達(dá)式:

  1. //x的類型省略了,編譯器可以根據(jù)上下文推斷出來,后面跟著的是表達(dá)式  
  2. x => x+1  
  3. deleage(int x){return x+1;}  
  4. //后面跟著的是語句塊  
  5. x=>{return x+1;}  
  6. delegate(int x){return x+1;}  
  7. //輸入?yún)?shù)也可以帶類型,帶類型后別忘記小括號(hào)哦  
  8. (int x) => x+1  
  9. delegate(int x){return x+1;}  
  10. //也可以多個(gè)輸入?yún)?shù),逗號(hào)分隔,別忘記小括號(hào)  
  11. (x,y) => x+y  
  12. delegate(int x,int y){return x+y;}  
  13. //無參的也行  
  14.  
  15. () => 1  
  16.  
  17. delegate(){return 1;}  

對(duì)于C# Lambda表達(dá)式來說她的用法就是如此,但是在Lambda背后卻有很多的故事和玄機(jī)。用C# Lambda表達(dá)式可以構(gòu)建表達(dá)式樹,而表達(dá)式樹對(duì)于Linq來說就像樹根對(duì)于樹一樣重要。在這里就不討論表達(dá)式樹的問題了,這個(gè)東西也不是三言兩語能夠說清楚的,等待時(shí)機(jī)成熟的時(shí)候我們再來進(jìn)一步討論。

C# Lambda表達(dá)式更多閱讀

Lambda實(shí)際上源遠(yuǎn)流長,我們現(xiàn)在使用的機(jī)器都是馮-諾依曼體系的,屬于圖靈機(jī),在那之前還有一種稱作λ演算的理論,但是圖靈機(jī)由于先被實(shí)現(xiàn)出來,所以大行其道,λ 演算后來成就了函數(shù)式編程語言特別是Lisp,在函數(shù)式編程語言里函數(shù)是***等元素,函數(shù)的參數(shù),函數(shù)的返回值都是函數(shù),程序沒有變量,函數(shù)嵌套函數(shù)。而且函數(shù)式編程語言一直存在于象牙塔中,所以在工業(yè)界并沒有得到通用,不過近年來工業(yè)界比較喜歡“復(fù)古”風(fēng)格,所以函數(shù)式編程語言也慢慢的走上了歷史的舞臺(tái)。函數(shù)式編程能解決一些命令式編程難以解決的問題(或者解決起來非常麻煩)。C#要做到函數(shù)風(fēng)格編程怎么辦?靠原來的方法定義的方式肯定是不可行的,2.0的匿名方法從某種程序上來說解決了這個(gè)問題,但還是不夠,3.0里的Lambda終于很好的解決了,一個(gè)Lambda就是一個(gè)delegate,一個(gè)delegate指向一個(gè)方法,現(xiàn)在我們使用Lambda也能簡單的將方法作為參數(shù)傳遞了,還可以層層嵌套,都是很簡單的事情了。

【編輯推薦】

  1. C# lock關(guān)鍵字?jǐn)⑹?/FONT>
  2. C#.Net FrameWork簡介
  3. C# new和override簡單描述
  4. C#值類型和引用類型淺談
  5. C#標(biāo)識(shí)符簡單分析
責(zé)任編輯:佚名 來源: IT168
相關(guān)推薦

2009-08-27 09:44:59

C# Lambda表達(dá)

2009-08-27 09:57:50

C# Lambda表達(dá)

2009-08-13 15:24:27

C#正則表達(dá)式

2009-08-11 13:00:41

C#正則表達(dá)式

2024-03-25 13:46:12

C#Lambda編程

2021-08-31 07:19:41

Lambda表達(dá)式C#

2009-07-09 09:51:07

Lambda表達(dá)式C#

2009-09-14 13:57:20

C# Lambda表達(dá)Lambda表達(dá)式

2010-09-14 14:05:42

C#委托

2011-05-20 17:50:45

C#

2010-10-19 10:03:02

Lambda表達(dá)式

2022-11-07 07:11:19

C#lambda函數(shù)

2009-08-07 15:41:39

C#正規(guī)表達(dá)式

2009-07-01 09:56:10

C#3.0

2020-10-16 06:40:25

C++匿名函數(shù)

2009-09-11 09:48:27

Linq Lambda

2023-11-02 08:25:58

C++Lambda

2009-09-09 13:01:33

LINQ Lambda

2009-09-15 15:18:00

Linq Lambda

2022-12-05 09:31:51

接口lambda表達(dá)式
點(diǎn)贊
收藏

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