相关疑难解决方法(0)

闭包在for循环和foreach循环中表现不同

在C#中尝试使用闭包时,我发现如果它们在循环中捕获迭代器变量,它们会出乎意料地工作.

var actions = new List<Action>();

foreach (int i in new[] { 1, 2 })
    actions.Add(() => Console.WriteLine(i));

for (int i = 3; i <= 4; i++)
    actions.Add(() => Console.WriteLine(i));

foreach (var action in actions)
    action();
Run Code Online (Sandbox Code Playgroud)

上面的代码产生了一个奇怪的结果(我使用的是.NET 4.5编译器):

1
2
5
5
Run Code Online (Sandbox Code Playgroud)

为什么i两个几乎相同的循环捕获的值不同?

c# closures for-loop

5
推荐指数
1
解决办法
296
查看次数

标签 统计

c# ×1

closures ×1

for-loop ×1