Замыкания, ведущие себя по-разному в циклах for и foreach
Экспериментируя с замыканиями в C #, я обнаружил, что они работают довольно неожиданно, если они записывают переменную итератора в цикле.
var actions = new List<Action>();
foreach (int i in new[] { 1, 2 })
actions.Add(() => Console.WriteLine(i));
for (int i = 3; i <= 4; i++)
actions.Add(() => Console.WriteLine(i));
foreach (var action in actions)
action();
Приведенный выше код дает странный результат (я использую компилятор .NET 4.5):
1
2
5
5
Почему ценностьi
по-разному для 2 практически одинаковых петель?