Verschlüsse, die sich in for- und foreach-Schleifen unterschiedlich verhalten
Während ich mit Closures in C # experimentierte, stellte ich fest, dass sie ziemlich unerwartet funktionieren, wenn sie eine Iteratorvariable in einer Schleife erfassen.
var actions = new List<Action>();
foreach (int i in new[] { 1, 2 })
actions.Add(() => Console.WriteLine(i));
for (int i = 3; i <= 4; i++)
actions.Add(() => Console.WriteLine(i));
foreach (var action in actions)
action();
Der obige Code erzeugt ein seltsames Ergebnis (ich verwende den .NET 4.5-Compiler):
1
2
5
5
Warum ist der Wert voni
für 2 fast identische Loops unterschiedlich erfasst?