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