Fechamento Capturado (Loop Variable) em C # 5.0

Isso funciona bem (como esperado) no 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 0 a 9. Mas este mostra 10 por 10 vezes:

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

Pergunta: Este foi um problema que tivemos em versões C # antes de 5.0; então tivemos que usar um espaço reservado para loop local para o fechamento e ele foi corrigido agora - em C # 5.0 - em loops "foreach". Mas não em "for" loops!

Qual é o raciocínio por trás disso (não consertar o problemafor loops também)?

questionAnswers(1)

yourAnswerToTheQuestion