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

时间:2014-05-20 02:15:00

标签: c# .net visual-studio-2010 visual-studio-2012

我的盒子上安装了.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,以上程序产生&#34;啤酒&#34; 4次

使用VS2012和.net 4:

  

foo bar baz beer

2 个答案:

答案 0 :(得分:2)

对此的修复不属于.Net 4,它是C#5的一部分。因此,您正在使用的编译器,而不是您目标的框架版本,会影响此代码的行为。< / p>

讨论here,并正式宣布here

答案 1 :(得分:0)

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