c 3 0 初體驗 2 Lambda表示式

2021-04-13 09:43:05 字數 974 閱讀 9193

c#2.0的匿名方法允許我們以內聯的方式來實現委託,而c#3.0的lambda表示式允許我們使用一種更加接近人的思維,更加自然的方式來實現類似匿名方法的方式。計算機的發展告訴我們,人們對計算機上的研究都是不斷在趨近於人的思維,而不是計算機的思維,比如我們已開始使用的組合語言,然後出現了高階語言,物件導向的高階語言,等等。如何讓計算機能夠理解普通人的需求,我們程式設計師的作用就是起這種橋接作用,我們要不斷的嘗試讓計算機更好的理解編**員的思想。計算機能理解的抽象層級的提高,我們程式設計師就能更減輕痛苦。看下邊的例子:

list.findall(

delegate(string s)

lambda

list.findall(s=>s.indexof(「abc」)>0);

很明顯,lamdba表示式更加接近人的思維,而不是象內聯方法那樣努力的在讓計算機來理解,而lambda表示式表達的非常的自然,如果我們能以這樣的方式編寫程式,那麼是多麼的舒服。我們上邊的內聯方式有委託,有返回值,都是為計算機寫,而不是趨近於人來思考的東西。

(引數列表)=>表示式或者語句塊

(x,y)=〉x*y

其實編譯器會將lambda表示式在編譯的時候轉化成委託型別。

lambda表示式和委託型別

lambda表示式l可以被轉化為委託型別d,需要滿足:

l和d擁有相同的引數個數。

l的引數型別與d的引數型別相同,主要隱式型別要參與型別辨析。

d的返回型別與l相同,無論l是表示式,還是語句塊。

比如x=〉x*10的委託型別就是 delegate int mydeg(int)

我們有下邊的例子:

表示式myclass.process((x,y)=>x*y)就等同於下邊的一段**:

mydletegate md1=new mydelegate1(***xx);

myclass.process(md1);

public static int bool ***xx(int x,int y)

C 3 0亮點 lambda表示式

c 2.0之前,如果乙個方法或者變數需要使用委託 delegate 時,則之前必須建立乙個命名方法,並在需要委託的位置傳入這個名稱.比如有乙個針對int型別的資料處理,目的是篩選出乙個int陣列中為奇數的元素,或者其它一些滿足條件的元素.public class commom commom類建立了乙...

C 3 0亮點 lambda表示式

c 2.0之前,如果乙個方法或者變數需要使用委託 delegate 時,則之前必須建立乙個命名方法,並在需要委託的位置傳入這個名稱.比如有乙個針對int型別的資料處理,目的是篩選出乙個int陣列中為奇數的元素,或者其它一些滿足條件的元素.public class commom commom類建立了乙...

lambda表示式初體驗

lambda的前提 有乙個介面,並且有且只有乙個抽象方法 1 函式式程式設計思想 考慮要做什麼,而不是怎麼做 2 初體驗 實現 啟動乙個執行緒,控制台輸出,執行緒啟動了。定義乙個類myrunnable實現runnable介面,重寫run方法 建立myrunnable類物件 建立thread類物件,把...