最佳答案
我遇到了一个关于c#的有趣问题。我有如下代码。
List<Func<int>> actions = new List<Func<int>>();
int variable = 0;
while (variable < 5)
{
actions.Add(() => variable * 2);
++ variable;
}
foreach (var act in actions)
{
Console.WriteLine(act.Invoke());
}
我期望它输出0 2 4 6 8。然而,它实际上输出了5个10。
这似乎是由于所有的操作都指向一个捕获的变量。因此,当调用它们时,它们都有相同的输出。
有没有办法绕过这个限制,让每个动作实例都有自己的捕获变量?