Captured Closure (Schleifenvariable) in C # 5.0

Dies funktioniert in C # 5.0 einwandfrei (dh wie erwartet):

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

Druckt 0 bis 9. Aber dieser zeigt 10 mal für 10:

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

Frage: Dies war ein Problem, das wir in C # -Versionen vor 5.0 hatten. Daher mussten wir einen schleifenlokalen Platzhalter für den Abschluss verwenden und dieser wurde jetzt in C # 5.0 in "foreach" -Schleifen behoben. Aber nicht in "for" -Schleifen!

Was ist der Grund dafür?for Schleifen auch)?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage