gpt4 book ai didi

c# - 你如何捕获迭代变量?

转载 作者:可可西里 更新时间:2023-11-01 08:21:21 25 4
gpt4 key购买 nike

当您捕获 for 循环的迭代变量时,C# 将该变量视为在循环外声明的一样。这意味着在每次迭代中捕获相同的变量。以下程序写入 333 而不是写入 012:

Action[] actions = new Action[3];
for (int i = 0; i < 3; i++)
actions [i] = () => Console.Write (i);

foreach (Action a in actions) a(); // 333

我正在阅读 C# in a Nutshell(第 5 版),今天我遇到了这个,但我无法理解它,我不明白为什么输出是 333 并且不是 012。是不是因为要打印的 i 的值是循环之后的值?这怎么可能? i 应该在循环之后处理,不是吗?

最佳答案

变量 i 被捕获在 for 循环中,但您这样做有点扩展了它的范围。所以变量保留在它的最后状态,即 3,因此代码输出 333。

另一种编写代码的方法是这样的:

Action[] actions = new Action[3];
int i; //declare i here instead of in the for loop

for (i = 0; i < 3; i++)
actions [i] = () => Console.Write (i);

//Now i=3
foreach (Action a in actions) a(); // 333

输出和写一样:

Console.Write(i);
Console.Write(i);
Console.Write(i);

关于c# - 你如何捕获迭代变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23857448/

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