Это работает отлично (как ожидается) в С# 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; поэтому нам пришлось использовать локатор-заполнитель для закрытия и теперь он исправлен - в С# 5.0 - в циклах "foreach". Но не в циклах "для"!
В чем причина этого (не устраняя проблему для циклов for
)?