.NET Lambda表达式
Lambda表达式
(参数)=>表达式或语句块,如果只有一个并且类型可推断的话,括号可以省略。
Lambda表达式可以引用外部的变量,引用的变量生命周期会延长到与Lambda相同。
Lambda表达式本身也可以更新捕获的外部变量的值。
Lambda表达式的一个特性,Lambda表达式会延迟到委托调用时才执行,例如如果一个Lamdba表达式捕获了外部for循环每次迭代的i值,最后只会得到相同的i值比如下面这个例子:
Action[] action = new Action[3];
for (int i = 0; i < 3; i++)
{
action[i] = () => Console.WriteLine(i);
}
foreach (Action item in action)
{
item();
}
Lambda表达式捕获了不同值的i,但最后的输出是三个3,不是0,1,2。如果想用循环实现0,1,2的输出,可以在循环里定义变量并被表达式捕获:
Action[] action = new Action[3];
for (int i = 0; i < 3; i++)
{
int j = i;
action[i] = () => Console.WriteLine(j);
}
foreach (Action item in action)
{
item();
}
上面只是用一个临时变量被表达式捕获就实现了效果,在内存里,其实是三个不同的j变量被表达式捕获了