程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# 3.0特性 - 匿名方法和Lambda表達式(2)

C# 3.0特性 - 匿名方法和Lambda表達式(2)

編輯:關於C語言

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

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

//x的類型省略了,編譯器可以根據上下文推斷出來,後面跟著的是表達式
x => x+1
deleage(int x){return x+1;}
//後面跟著的是語句塊
x=>{return x+1;}
delegate(int x){return x+1;}
//輸入參數也可以帶類型,帶類型後別忘記小括號哦
(int x) => x+1
delegate(int x){return x+1;}
//也可以多個輸入參數,逗號分隔,別忘記小括號
(x,y) => x+y
delegate(int x,int y){return x+y;}
//無參的也行
() => 1
delegate(){return 1;}

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

Lambda表達式更多閱讀

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved