Maison > développement back-end > C++ > Pourquoi ma boucle C # capture-t-elle la mauvaise valeur variable?

Pourquoi ma boucle C # capture-t-elle la mauvaise valeur variable?

Susan Sarandon
Libérer: 2025-02-03 07:59:09
original
841 Les gens l'ont consulté

Why Does My C# Loop Capture the Wrong Variable Value?

Couvrir la variable dans le cycle: un problème étrange

Lorsque vous utilisez le cycle C #, vous pouvez rencontrer un problème spécial pour capturer des variables. Considérons les scènes suivantes:

Contrairement à attendu, ce code imprime cinq "10" au lieu de la séquence attendue 0, 2, 4, 6, 8.
<code class="language-csharp">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();
}</code>
Copier après la connexion

Question: La variable de capture dans le cycle

Toutes les fonctions lambda créées dans le cycle capturent la même variable . Par conséquent, lorsque ces fonctions sont appelées à l'extérieur, elles citent toutes la valeur finale de

.

variable Solution: copier le sauvetage variable

Afin de résoudre ce problème, vous devez créer une copie de la variable dans le cycle, puis la capturer dans chaque fonction lambda:

En créant une copie, chaque fermeture créée dans le cycle capturera sa propre valeur unique

, générant ainsi la sortie attendue.

<code class="language-csharp">while (variable < 5)
{
    int copy = variable;
    actions.Add(() => Console.WriteLine(copy * 2));
    ++variable;
}</code>
Copier après la connexion
Précautions

variable

Veuillez noter que cette technologie est également applicable au cycle pour et foreach, qui fait référence à une seule variable en itérations multiples. Pour éviter ce problème, il est recommandé d'obéir à la méthode de traitement du compilateur C # 5 du cycle foreach, qui garantit que chaque itération a sa propre variable de capture.

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!

source:php.cn
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