Los cierres se comportan de manera diferente en los bucles for y foreach
Mientras experimentaba con los cierres en C # descubrí que funcionan de manera bastante inesperada si capturan una variable iteradora en un bucle.
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();
El código anterior produce un resultado extraño (estoy usando el compilador .NET 4.5):
1
2
5
5
¿Por qué es el valor dei
capturado de manera diferente para 2 bucles casi idénticos?