Maison > développement back-end > C++ > Pourquoi les actions de boucle C # capturent-elles la même variable et comment cela peut-il être évité?

Pourquoi les actions de boucle C # capturent-elles la même variable et comment cela peut-il être évité?

Mary-Kate Olsen
Libérer: 2025-02-03 07:44:16
original
621 Les gens l'ont consulté

Why Do C# Loop Actions Capture the Same Variable, and How Can This Be Avoided?

Les variables de la capture du cycle

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();
}
Copier après la connexion
, qui est mise à jour dans le cycle. Lors de l'appel, toutes les opérations ont la même valeur 10.

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;
}
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal