Fechos comportando-se de maneira diferente nos loops foreach e foreach
Ao experimentar fechamentos em C #, descobri que eles funcionam inesperadamente se capturam uma variável iteradora em um loop.
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();
O código acima produz um resultado estranho (estou usando o compilador .NET 4.5):
1
2
5
5
Por que o valor dei
capturado de forma diferente por 2 loops quase idênticos?