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中使用迭代变量是个坏主意?
我可以在以后引起什么问题?

考虑这个代码
  1. List<Action> actions = new List<Action>();
  2.  
  3. for (int i=0; i < 10; i++)
  4. {
  5. actions.Add(() => Console.WriteLine(i));
  6. }
  7.  
  8. foreach (Action action in actions)
  9. {
  10. action();
  11. }

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

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

猜你在找的VB相关文章