【发布时间】:2012-10-12 14:46:27
【问题描述】:
我正在努力解决问题,这里发生了什么?编译器会生成什么样的代码?
public static void vc()
{
var listActions = new List<Action>();
foreach (int i in Enumerable.Range(1, 10))
{
listActions.Add(() => Console.WriteLine(i));
}
foreach (Action action in listActions)
{
action();
}
}
static void Main(string[] args)
{
vc();
}
输出: 10 10 .. 10
根据this,每次迭代都会创建一个新的 ActionHelper 实例。所以在那种情况下,我认为它应该打印 1..10。 有人可以给我一些编译器在这里做什么的伪代码吗?
谢谢。
【问题讨论】:
-
看来VS2013和.NET 4.5已经不是问题了