Lambda表达式是一种匿名函数。
演变步骤:
一般的方法委托 => 匿名函数委托 => Lambda表达式
Lambda表达式其实并不陌生,他的前生就是匿名函数,所以要谈Lambda表达式,就不得不谈匿名函数,要谈匿名函数,那又要不得不谈委托。
委托非常好理解,类似于C++里面的函数指针(指向了一个方法),并且委托约束了待指向方法的签名(由返回类型和参数组成)。
首先,定义一个委托如 :
delegate int ProcessInt(int i);
定义了委托可以像变量一样传递方法。如:
void Sample(ProcessInt pro)
这时我们需要写与委托签名一样的方法:
int Double(int i)
{
return i * ;
} int Divide(int i)
{
return Convert.ToInt32(i / );
}
对一个很简单的操作,来说,这样重复定义方法很麻烦,不够优雅,.net 2.0 出现了匿名方法,像这样:
Sample(delegate(int i) { return i * ; }); //匿名方法
现在好了,要调什么方法,我不用再定义方法了,但是写程序还是要敲很多字符,好,Lambda表达式来了。它是这样写的:
Sample(i => i * ); //Lambda表达式
或者说,这样
Sample2((i, k) => i * k);
代码:
执行Test就可以验证结果。
delegate int ProcessInt(int i);
delegate int Add(int i, int k);
int Double(int i)
{
return i * ;
} int Divide(int i)
{
return Convert.ToInt32(i / );
} void Sample(ProcessInt pro)
{
int i = ;
Console.WriteLine(pro(i)); } void Sample2(Add pro)
{
int i = ;
int k = ;
Console.WriteLine(pro(i,k)); } public void Test()
{
Sample(Double);
Sample(Divide); //委托
Sample(delegate(int i) { return i * ; }); //匿名方法
Sample(i => i * ); //Lambda表达式
Sample(i => Convert.ToInt32(i / ));
Sample2((i, k) => i * k); }