这在 C# 5.0 中工作正常(如预期的那样):
var actions = new List<Action>();
foreach (var i in Enumerable.Range(0, 10))
{
actions.Add(() => Console.WriteLine(i));
}
foreach (var act in actions) act();
打印 0 到 9。但这个显示 10 10 次:
var actions = new List<Action>();
for (var i = 0; i < 10; i++)
{
actions.Add(() => Console.WriteLine(i));
}
foreach (var act in actions) act();
问:这是我们在 5.0 之前的 C# 版本中遇到的问题;所以我们不得不为闭包使用循环本地占位符,现在它在“foreach”循环中已修复 - 在 C# 5.0 中。但不在“for”循环中!
这背后的原因是什么(也没有解决for
循环问题)?