Avatar ·

为什么在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循环中,据我所知,一切正常。 有人能解释一下问题出在哪里吗?最重要的是——如何正确修改这段代码以获得期望的结果?提前感谢! <<>>

问题原因: