gpt4 book ai didi

c# - 为什么在 lambda 表达式中使用迭代变量不好

转载 作者:行者123 更新时间:2023-12-03 06:03:10 25 4
gpt4 key购买 nike

我刚刚编写了一些快速代码并注意到了这个编译器错误

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 年开始的,所以实际行为可能从那时起已经发生了变化。

关于c# - 为什么在 lambda 表达式中使用迭代变量不好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/227820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com