Cierre capturado (variable de bucle) en C # 5.0

Esto funciona bien (significa como se esperaba) en 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();

Imprime de 0 a 9. Pero este muestra 10 por 10 veces:

var actions = new List<Action>();
for (var i = 0; i < 10; i++)
{
    actions.Add(() => Console.WriteLine(i));
}
foreach (var act in actions) act();

Pregunta: Este fue un problema que tuvimos en las versiones de C # anteriores a 5.0; así que tuvimos que usar un marcador local de bucle para el cierre y ahora está arreglado, en C # 5.0, en bucles "foreach". Pero no en "para" bucles!

¿Cuál es el razonamiento detrás de esto (no arreglar el problema parafor bucles también)?

Respuestas a la pregunta(1)

Su respuesta a la pregunta