У меня возник интересный вопрос о С#. У меня есть код, как показано ниже.
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. Однако на самом деле он выводит пять 10 секунд.
Кажется, что это связано со всеми действиями, относящимися к одной захваченной переменной. В результате, когда они вызываются, все они имеют одинаковый вывод.
Есть ли способ обойти этот предел, чтобы каждый экземпляр действия имел свою собственную захваченную переменную?