J'ai rencontré un numéro intéressant sur C #. J'ai un code comme ci-dessous.
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());
}
Je m'attends à ce qu'il produise 0, 2, 4, 6, 8. Cependant, il produit en fait cinq 10.
Il semble que cela soit dû à toutes les actions faisant référence à une variable capturée. En conséquence, lorsqu'ils sont appelés, ils ont tous le même résultat.
Est-il possible de contourner cette limite pour que chaque instance d'action ait sa propre variable capturée?