vb.net – 为什么在lambda表达式中使用迭代变量很不好

前端之家收集整理的这篇文章主要介绍了vb.net – 为什么在lambda表达式中使用迭代变量很不好前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我只是写了一些快速代码,注意到这个编译器错误

Using the iteration variable in a lambda expression may have unexpected results.
Instead,create a local variable within the loop and assign it the value of the iteration variable.

我知道它的意思,我可以很容易地解决它,不是一个大事。
但我想知道为什么在lambda中使用迭代变量是个坏主意?
我可以在以后引起什么问题?

考虑这个代码
List<Action> actions = new List<Action>();

for (int i=0; i < 10; i++)
{
    actions.Add(() => Console.WriteLine(i));
}

foreach (Action action in actions)
{
    action();
}

你希望这打印什么?明显的答案是0 … 9 – 但实际上它打印10,十次。这是因为只有一个变量被所有的代表捕获。这是一种意想不到的行为。

编辑:我刚刚看到你在谈论VB.NET而不是C#。我相信VB.NET有更复杂的规则,由于变量在迭代中保持它们的值。 This post by Jared Parsons给出了一些关于所涉及的困难的信息 – 虽然它回到2007年,所以实际行为可能已经改变了。

猜你在找的VB相关文章