在 C#2.0中,微軟給我們帶來了一些新的特性,例如泛型,匿名委托等。然而,這 些新的特性多多少少會給人一種從別的語言中“抄”來的感覺(例如 泛型類似C++的模板,一些特性類似Java中的一些東西)。但是在C#3.0中,微軟 給我帶來的一些新特性可能是以前所有開發語言都沒有的特性。這無疑大大的體 現了C#3.0在開發語言中強大的優勢。
Lambda表達式
Lambda 表達 式是一個匿名函數,它可以包含表達式和語句,並且可用於創建委托或表達式目 錄樹類型。所有 Lambda 表達式都使用 Lambda 運算符 =>。關於Lambda更詳 細的講解大家可以參看 MSDN。裡面說的很清楚。
這裡簡單舉個例子來說 明Lambda的好處。Lambda在對匿名委托的處理上提供了更清楚的實施方式。例如 在2.0中。我們可以寫這樣的代碼:
public class Example
{
public static void Demo (System.Windows.Controls.TextBlock outputBlock)
{
Func<string, string> convert = delegate(string s)
{ return s.ToUpper(); };
string name = "Dakota";
outputBlock.Text += convert(name) + "\n";
}
}
在 C# 中將 Func<(Of <(T, TResult>)>) 委托與匿名方法一起使用。
在3.0中,我們可以使用Lambda來更清楚的進行參數的傳遞:
public class Example
{
public static void Demo(System.Windows.Controls.TextBlock outputBlock)
{
Func<string, string> convert = s => s.ToUpper ();
string name = "Dakota";
outputBlock.Text += convert(name) + "\n";
}
}
Lambda 表達式的基礎類型是泛型 Func 委托之一。這 樣能以參數形式傳遞 lambda 表達式,而不用顯式將其分配給委托。尤其是,因 為 System.Linq 命名空間中許多類型方法具有 Func<(Of <(T, TResult>)>) 參數,因此可以給這些方法傳遞 lambda 表達式,而不用顯 式實例化 Func<(Of <(T, TResult>)>) 委托。這樣可以使我們的 代碼更加簡潔,邏輯上更易於理解。