En C #, lors de la définition de l'opération dans le cycle, assurez-vous de faire attention au comportement de la capture variable. Par défaut, toutes les opérations capturent la même variable, ce qui fait que les résultats de sortie ne respectent pas les appels attendus.
Veuillez considérer l'exemple suivant:
La sortie attendue de ce code est 0, 2, 4, 6 et 8. Cependant, la sortie réelle est de cinq 10. En effet, toutes les opérations citent la même variable capturée
List<Action> actions = new List<Action>(); int variable = 0; while (variable < 5) { actions.Add(() => Console.WriteLine(variable * 2)); ++variable; } foreach (var act in actions) { act.Invoke(); }
variable
Afin d'éviter ce problème et de vous assurer que chaque instance d'opération a sa propre variable de capture, vous devez copier la variable dans le cycle:
Grâce à la copie locale de la variable, chaque opération capture sa propre valeur unique, afin d'obtenir la sortie attendue 0, 2, 4, 6, 8.
while (variable < 5) { int copy = variable; actions.Add(() => Console.WriteLine(copy * 2)); ++variable; }
Le concept de cette capture variable est essentiel pour comprendre la fermeture de C #. Lorsque vous définissez des opérations dans le cycle, assurez-vous de considérer le cycle de vie de la variable et son accessibilité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!