.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变量被表达式捕获了

posted @ 2022-10-03 08:02  lrplrplrp  阅读(162)  评论(0编辑  收藏  举报