Maison > développement back-end > C++ > Pourquoi les améliorations de fermeture capturées par C# 5.0 n'ont-elles pas été appliquées aux boucles « for » ?

Pourquoi les améliorations de fermeture capturées par C# 5.0 n'ont-elles pas été appliquées aux boucles « for » ?

Linda Hamilton
Libérer: 2025-01-07 19:26:41
original
183 Les gens l'ont consulté

Why weren't C# 5.0's captured closure improvements applied to `for` loops?

C# 5.0 : Pourquoi for les boucles ont manqué l'amélioration de la fermeture capturée

C# 5.0 a résolu le problème des variables de boucle capturées dans les foreach boucles, garantissant que les variables de fermeture reflètent avec précision la valeur de la variable de boucle au moment de la capture. Cependant, cette amélioration n'a pas été appliquée aux boucles for, qui conservent leur comportement d'avant la version 5.0.

La raison de l'omission

Cette exclusion intentionnelle découle de différences fondamentales entre les boucles for et foreach :

  • for boucles : centrées sur l'initialisation. Une boucle for commence par un initialiseur attribuant une valeur à la variable de boucle. Cette variable est centrale dans la logique de la boucle, modifiée et vérifiée à plusieurs reprises.
  • foreach boucles : basées sur un itérateur. foreach les boucles reposent sur un itérateur fournissant des valeurs pour chaque itération. La variable de boucle agit comme un espace réservé, accédant à la valeur de l'itérateur.

Dans les boucles for, le concept d'une seule « instanciation de variable de boucle » s'aligne sur leur nature axée sur l'initialisation. Il existe une seule instance de variable de boucle logiquement cohérente, initialisée, mise à jour et contrôlant la fin de la boucle.

Considérez cette for boucle :

<code class="language-csharp">for (int i = 0; i < 10; i++) { ... }</code>
Copier après la connexion

Ici, i gère le nombre d'itérations. Il est initialisé à 0, incrémenté à chaque itération et contrôle la fin de la boucle. Une fermeture capturant i ferait intuitivement référence à une seule valeur, quels que soient les changements en boucle de i. Cela contredit la dépendance de la boucle for à l'égard du changement d'état de la variable.

À l'inverse, foreach les boucles ne dépendent pas de l'état de la variable de boucle. Ils parcourent une collection sans avoir besoin d’une instance de variable spécifique. Ainsi, la fermeture capture la valeur de l'itérateur au moment de la capture, isolée des modifications ultérieures.

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