C# Lambda運算式學習筆記

來源:互聯網
上載者:User
    這裡介紹C# Lambda運算式,它實際上和匿名方法沒有什麼不同。Lambda的輸入參數就對應著delegate括弧裡面的參數,由於C# Lambda運算式可以推斷參數的類型,所以這裡的參數無需聲明。

     

    C#語言還是比較常見的東西,這裡我們主要介紹C# Lambda運算式,包括介紹一個Lambda就是一個delegate,一個delegate指向一個方法等方面。

     

    你有沒有接觸過C# Lambda運算式,有沒有覺得匿名方法這東西很不錯,減少了很多代碼阿,但是匿名方法的使用還並不人性化,什麼是人性化呢?比如你可以用自然的語言將程式碼讀出來,這樣才算人性化了。在.net 2.0中System.Collections.Generic命名空間下List裡有一些新增的方法。比如Find,如果使用匿名方法我們如何調用呢:

     

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

代碼是很簡單,但是卻無法朗讀出來,來看看C# Lambda運算式的寫法:

 

books.Find(book=>book.Price<50);這個C# Lambda運算式就可以這樣閱讀出來了:給你一本書,如果它的價格小於50則返回true。

 

好了,那我們就走進C# Lambda運算式吧:

 

 

將使用了C# Lambda運算式的程式集反編譯後,我們發現,它實際上和匿名方法沒有什麼不同。Lambda的輸入參數就對應著delegate括弧裡面的參數,由於C# Lambda運算式可以推斷參數的類型,所以這裡的參數無需聲明。

 

Lambda操作符讀作”Goes to”,它後面緊跟著運算式或者是語句塊(這點和匿名方法也不同,匿名方法只能使用語句塊而不能使用運算式),下面我就用執行個體來說明一下有那些類型的C# Lambda運算式:

 

 
  1. //x的類型省略了,編譯器可以根據上下文推斷出來,後面跟著的是運算式  
  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. //輸入參數也可以帶類型,帶類型後別忘記小括弧哦  
  8. (int x) => x+1   
  9. delegate(int x){return x+1;}  
  10. //也可以多個輸入參數,逗號分隔,別忘記小括弧  
  11. (x,y) => x+y   
  12. delegate(int x,int y){return x+y;}  
  13. //無參的也行  
  14.  
  15. () => 1   
  16.  
  17. delegate(){return 1;}  

對於C# Lambda運算式來說她的用法就是如此,但是在Lambda背後卻有很多的故事和玄機。用C# Lambda運算式可以構建運算式樹狀架構,而運算式樹狀架構對於Linq來說就像樹根對於樹一樣重要。在這裡就不討論運算式樹狀架構的問題了,這個東西也不是三言兩語能夠說清楚的,等待時機成熟的時候我們再來進一步討論。

 

C# Lambda運算式更多閱讀

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.