在VS2012和VS2010上运行相同的程序表现出不同的行为

本文关键字:程序表 VS2012 VS2010 运行 | 更新日期: 2023-09-27 18:04:03

我的机器上安装了。net 4.5,我理解下面的行为与。net 3.5和。net 4之间foreach捕获闭包的方式不同有关。

我想更好地理解为什么在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中,上面的程序产生"beer" 4次

使用VS2012和。net 4:

foo bar baz beer

在VS2012和VS2010上运行相同的程序表现出不同的行为

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

此处讨论,此处正式声明

这是一个bug,微软在VS2012中修复了它。我不知道,微软在vs2010的最后一个SP中修复了吗?如果你测试了,请通知我们。