Captured Closure (Loop Variable) w C # 5.0

Działa to dobrze (czyli zgodnie z oczekiwaniami) w 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();

Drukuje od 0 do 9. Ale ten pokazuje 10 na 10 razy:

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

Pytanie: To był problem, który mieliśmy w wersjach C # przed 5.0; więc musieliśmy użyć lokalnego pętli zastępczej dla zamknięcia i została ona teraz naprawiona - w C # 5.0 - w pętlach „foreach”. Ale nie w pętlach „za”!

Jakie jest tego uzasadnienie (nie naprawiając problemufor pętle też)?

questionAnswers(1)

yourAnswerToTheQuestion