Avatar ·

Warum wird die foreach-Schleifenvariable in C# von einem Lambda falsch erfasst?

Hallo zusammen! Ich habe vor kurzem angefangen, C# zu lernen, und bin auf ein sehr seltsames Verhalten gestoßen, wenn ich Lambda-Ausdrücke innerhalb einer `foreach`-Schleife verwende. Ich habe einen einfachen Code, bei dem ich eine Liste von Aktionen erstelle, die Zahlen von 0 bis 4 ausgeben sollen: ```csharp var actions = new List(); for (int i = 0; i < 5; i++) { actions.Add(() => Console.WriteLine(i)); } foreach (var action in actions) { action(); } ``` Dieser Code gibt aus: 5, 5, 5, 5, 5. Ich verstehe, dass das daran liegt, dass die Variable `i` als Referenz erfasst wird und zum Zeitpunkt des Aufrufs der Lambdas bereits 5 ist. Das ist logisch. Aber wenn ich dasselbe mit `foreach` mache: ```csharp var actions = new List(); foreach (var i in Enumerable.Range(0, 5)) { actions.Add(() => Console.WriteLine(i)); } foreach (var actio