“Lambda 表達式”是一個匿名函數,它可以包含表達式和語句,并且可用于創建委托或表達式目錄樹類型。
格式:( 形參列表 ) => { 函數體 }
所有 Lambda 表達式都使用 Lambda 運算符 =>,該運算符讀為“goes to”。該 Lambda 運算符的左邊是輸入參數(如果有),右邊包含表達式或語句塊。Lambda 表達式 x => x * x 讀作“x goes to x times x”。可以將此表達式分配給委托類型
委托這些概念是.NET高級編程中的,當一個程序員經過一個階段的學習之后,想要有一個提高,這時候學習這些概念就是必須的了,所以在講Lamda表達式時,把這委托,匿名委托(匿名方法),Lamda表達式這幾個概念整理了一下。
網上這方面的例子很多,但是對于起步階段的人來說,這些例子顯的晦澀了,所以我舉得例子中,為了更清楚的說明這三者的關系,將淡化其內部實現的功能。
首先講委托,在.NET中,委托這個概念有點類似于C/C++中的函數指針,但與指針不同的是,委托是一種安全的類型,那么我們就以實現兩個數的差值為例,首先聲明返回值為int的一個成員方法:
public int CompareTwoValue(int a, int b)
{
int c=a-b;
return c;
}
接著聲明一個委托:
public delegate int deleMethod(int a,int b);
然后,我們可以通過這個委托調用這個上面的成員方法,
public int Show()
{
deleMethod d1 = new deleMethod(CompareTwoValue);
return d1(5,10);
}
那么,關于委托的概念,我就講到這里,接著說明一下,匿名委托,其實也稱作匿名方法,其實,這只是一種語法形式上的變化,因為編譯的時候,還是要進行類型匹配的,那么對于上面的Show方法,我可以使用匿名委托的方式來表達
public int Show1()
{
deleMethod d2 = delegate(int a, int b)
{
int c=a-b;
return c;
};
return d2(5,10);
}
可以看出,語法形式上簡便了,所以我個人覺得匿名委托在C#2.0中并沒有實質性的用處,因為到3.0時,涉及到Lamda表達式時,才真正的有用處,那么上面的方法,如果用Lamda表達式表述如下:
public int Show2()
{
Func<int, int, int> f = ( a,b) =>
{
return a - b;
};
return f(5,10);
}
初次接觸Lamda表達式時感覺很難懂,但是一旦理解了之后,我就很喜歡這種表達方式,其實,Lamda表達式只是匿名委托的一種表現形式,從上面的結果可以很直觀的看出,三種方式中,Lamda表達式編寫的代碼量最少,最后看一下執行的結果
TestExample test = new TestExample();
Console.WriteLine(test.Show());
Console.WriteLine(test.Show1());
Console.WriteLine(test.Show2());
結果是一致的,其實三者的功能是一致的,只是表現形式不一樣,而三種方法中,Lamda表達式編寫的代碼量最少。
原文地址:http://yangwenju1987.blog.163.com/blog/static/3126162920112462551125/
新聞熱點
疑難解答