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?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage