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变量被表达式捕获了
标签:item,捕获,action,Action,NET,表达式,Lambda From: https://www.cnblogs.com/lrplrplrp/p/16749961.html