Warum wird die foreach-Schleifenvariable in C# in einem Lambda-Ausdruck als Referenz erfasst?
Hallo zusammen! Ich bin ein Anfänger in C# und bin auf ein sehr seltsames Verhalten gestoßen, als ich foreach zusammen mit Lambda-Ausdrücken verwendet habe.
Ich habe diesen Code:
```csharp
var actions = new List();
var numbers = new List { 1, 2, 3, 4, 5 };
foreach (var number in numbers)
{
actions.Add(() => Console.WriteLine(number));
}
foreach (var action in actions)
{
action();
}
```
Ich erwartete, dass auf der Konsole ausgegeben wird:
```
1
2
3
4
5
```
Aber stattdessen sehe ich:
```
5
5
5
5
5
```
Warum passiert das? Ich habe gelesen, dass es damit zusammenhängt, wie C# die Schleifenvariable in foreach behandelt. Aber ich verstehe nicht, warum sie sich bei jeder Iteration wie "dieselbe" Variable verhält, anstatt neu erstellt zu werden. In einer for-Schleife funktioniert, soweit ich weiß, alles normal.
Kann mir jemand erklären, worum es hier geht? Und vor allem – wie kann ich diesen Code korrigieren, um das erwartete Ergebnis zu erhalten? Vielen Dank im Voraus!
<<>>