天天看點

C# Lambda表達式

自C#3.0開始,就可以使用一種新文法把實作代碼賦予委托:Lambda表達式。隻要有委托參數類型的地方,就可以使用Lambda表達式。

Lambda表達式的文法比匿名方法簡單。如果所調用的方法有參數,且不需要參數,匿名方法的文法就比較簡單,因為這樣不需要提供參數。

直接上一些例子,讀者可以自行運作調試。

在winform程式設計中,我們經常給某個按鈕添加Click事件,最原始的寫法是直接輕按兩下按鈕,生成Click事件的代碼,我們就可以直接在裡面寫方法了。其實這是vs替我們做了很多工作,其中就有在designer.cs檔案中,生成了 this.button1.Click += new System.EventHandler(this.button1_Click);這樣的代碼,事件要注冊才能觸發。

我們采用匿名委托的寫法,在窗體的Form_Load事件中添加如下代碼,則可以觸發button1的Click事件。

再看看Lambda表達式的用法。

是不是更加簡潔?

我們再看一下,從匿名方法到Lambda簡寫的演化過程,借一張圖。

C# Lambda表達式

從這個演化過程,可以看出C#語言的發展變化過程。

下面詳細示範一下Lambda的應用執行個體。

首先第一個執行個體我們應用Lambda對一個List<Student>清單進行循環、查找、排序等操作。

首先我們提供一個實體類:

然後我們初始化一個List,

那麼,我們就可以先循環輸出一下:

如果我們要找到年齡大于20歲的學生,可以這樣:

進一步,我們按照學生的年齡進行排序:

現在,我們按照在students清單裡再加一個學生:

現在要按照年齡進行分組,并統計出各個年齡階段的人數:

再提供一個綜合性的例子,這是論壇裡的caozhy版主提供的一個例子。用Lambda表達式實作快速排序。