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