为什么在C#中foreach循环变量在lambda表达式中是按引用捕获的?
大家好!我是一名C#初学者,在使用foreach配合lambda表达式时遇到了一个非常奇怪的行为。
我有这样一段代码:
```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();
}
```
我期望控制台输出:
```
1
2
3
4
5
```
但实际上我看到的是:
```
5
5
5
5
5
```
为什么会这样?我读到过这与C#处理foreach循环变量的方式有关。但我不明白为什么它在每次迭代中表现得像“同一个”变量,而不是重新创建。因为在for循环中,据我所知,一切正常。
有人能解释一下问题出在哪里吗?最重要的是——如何正确修改这段代码以获得期望的结果?提前感谢!
<<>>