Variável capturada em um loop em C #
Eu conheci uma questão interessante sobre c #. Eu tenho código como abaixo.
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());
}
Espero que ele produza 0, 2, 4, 6, 8. No entanto, ele realmente produz cinco 10s.
Parece que isso se deve a todas as ações referentes a uma variável capturada. Como resultado, quando são chamados, todos têm a mesma saída.
Existe uma maneira de contornar esse limite para que cada instância de ação tenha sua própria variável capturada?