前端之家收集整理的这篇文章主要介绍了
vb.net – 为什么在lambda表达式中使用迭代变量很不好,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
502_0@
我只是写了一些
快速的
代码,注意到这个编译器
错误
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年,所以实际行为可能已经改变了。