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)?