我的盒子上安装了 .net 4.5,我了解以下行为与 foreach 捕获 .net 3.5 和 4 之间的闭包方式的差异有关。

我想更好地理解为什么在 VS 2012 和 VS2010 中运行相同的代码在两种情况下都使用 .net Framework 4 进行编译时显示不同的输出,是不是 VS 2012 运行带有一些特殊标志的 csc 导致它捕获关闭?

var words = new[] { "foo", "bar", "baz", "beer" };
var actions = new List<Action>();
foreach (string word in words)
{
    actions.Add(() => Console.WriteLine(word));
}

actions.ForEach(e => e());

输出:使用 VS2010 和 .net 4,上述程序产生“啤酒”4 倍

使用 VS2012 和 .net 4:

最佳答案

对此的修复不是 .Net 4 的一部分,而是 C# 5 的一部分。因此,影响此代码行为的是您正在使用的编译器,而不是您所针对的框架版本。

对此进行了讨论 here ,并正式声明为 here

关于c# - 在 VS2012 和 VS2010 上运行相同的程序表现出不同的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23749971/

10-12 00:13
查看更多