"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi la capture de la fermeture est-elle problématique en C # 5.0 pour les boucles et aucun problème de ce type dans les boucles foreach?

Pourquoi la capture de la fermeture est-elle problématique en C # 5.0 pour les boucles et aucun problème de ce type dans les boucles foreach?

Publié le 2025-04-12
Parcourir:813

Why are Captured Closures Problematic in C# 5.0 For Loops but Not Foreach Loops?

c # 5.0 Capture Cosetures in Loops: Différences entre pour les boucles et les boucles foreach

question:

En C # 5.0, la fermeture de capture dans la boucle FOREEAC peut être capturée correctement, mais pourquoi la fermeture de capture dans la boucle pour les problèmes?

répondre:

Logiquement parlant, le comportement des fermetures dans une boucle est raisonnable. Après avoir décomposé la boucle pour ses composants (initialiseur, condition, itérateur et corps), l'initialisateur ne s'exécute qu'une seule fois. Par conséquent, il est logique d'avoir une seule "instanciation variable".

En outre, dans la boucle FOR, la valeur initiale de la variable pour chaque itération n'est pas prédéterminée. Considérez l'exemple suivant:

for (int i = 0, j = 10; i  Console.WriteLine(i, j);
    action();
}

Dans cette boucle, la valeur de J peut changer pendant la boucle. Quel est le comportement attendu dans ce cas?

En revanche, la boucle foreach semble déclarer une nouvelle variable pour chaque itération, et cette variable est en lecture seule. Par conséquent, il est raisonnable de penser à une boucle Forach comme déclarant une variable en lecture seule dans chaque itération dont la valeur est tirée de l'itérateur. Cela explique pourquoi les fermetures peuvent être capturées correctement dans la boucle foreach.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3