Maison > développement back-end > C++ > Pourquoi C# 5.0 n'a-t-il pas corrigé le comportement de fermeture capturé pour les boucles « for » comme il l'a fait pour les boucles « foreach » ?

Pourquoi C# 5.0 n'a-t-il pas corrigé le comportement de fermeture capturé pour les boucles « for » comme il l'a fait pour les boucles « foreach » ?

Barbara Streisand
Libérer: 2025-01-07 19:22:42
original
195 Les gens l'ont consulté

Why Didn't C# 5.0 Fix Captured Closure Behavior for `for` Loops Like It Did for `foreach` Loops?

Capture de fermeture incohérente de C# 5.0 : for contre foreach

Le problème

C# 5.0 a amélioré la capture de fermeture dans les boucles foreach, mais pas dans les boucles for. Les boucles foreach capturent désormais correctement la valeur de la variable de boucle pour chaque itération. for les boucles, cependant, conservent l'ancien comportement, capturant uniquement la valeur finale de la variable de boucle.

La Question :Pourquoi cet écart ?

L'explication :

La différence vient de la structure fondamentale des boucles for et foreach. Une boucle foreach parcourt intrinsèquement une collection, créant une nouvelle instance de la variable de boucle pour chaque élément. Cela rend la capture cohérente par itération simple.

Une boucle for, en revanche, est plus complexe. Il se compose d'un initialiseur, d'une condition, d'un itérateur et d'un corps. L'initialiseur ne s'exécute qu'une seule fois, créant une seule variable de boucle. La valeur de la variable de boucle n'est pas intrinsèquement liée à chaque itération ; il peut être manipulé indépendamment dans le corps de la boucle.

Considérez :

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

Si la variable de boucle i était capturée à chaque itération, le comportement serait imprévisible et potentiellement ambigu en raison de la modification indépendante de j. Le comportement cohérent de capture de la valeur finale de i fournit un résultat clair et prévisible. Cela évite d’introduire des complexités inattendues et des bugs potentiels. Par conséquent, même si cela semble incohérent, la gestion différente dans C# 5.0 reflète les différences structurelles inhérentes entre les types de boucles et vise un comportement clair et prévisible dans chaque cas.

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