Maison >développement back-end >C++ >Pourquoi la réutilisation de la variable de boucle de C # de C # cause-t-elle des problèmes avec les fermetures?

Pourquoi la réutilisation de la variable de boucle de C # de C # cause-t-elle des problèmes avec les fermetures?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-31 21:11:11462parcourir

Why Does C#'s `foreach` Loop Variable Reuse Cause Problems with Closures?

c #

Réutilisation des variables de cycle: un piège inutile foreach Lorsque vous utilisez l'expression de lambda ou la méthode anonyme en C #, un accès à la fermeture modifié peut apparaître.

La réutilisation des variables dans le cycle a exacerbé ce problème.

foreach Le compilateur déclare généralement la variable de cycle à l'extérieur du corps du cycle, comme indiqué dans l'exemple de fermeture modifié:

Ceci est différent des attentes des variables déclarées dans le cycle:
<code class="language-C#">string s;
while (enumerator.MoveNext())
{
   s = enumerator.Current;
   ...
}</code>

L'instruction de variable externe a exacerbé le problème d'accès à la fermeture modifiée car il crée une portée plus longue pour les variables. Les variables déclarées dans le cycle ne sont pas accessibles en dehors du cycle.
<code class="language-C#">while (enumerator.MoveNext())
{
   string s;
   s = enumerator.Current;
   ...
}</code>

Le compilateur décide de réutiliser la variable circulaire avant l'introduction de l'expression de lambda et de la méthode anonyme. Par conséquent, il n'y avait aucun piège potentiel que la réutilisation variable était pleinement considérée à l'époque. foreach

En C # 5, ce défaut de conception sera résolu par un changement majeur. La variable circulaire sera logiquement à l'intérieur du corps du cycle pour s'assurer que chaque fermeture obtient une nouvelle copie. Ce changement élimine le piège de fermeture du cycle modifié.

Bien que cette réparation soit une amélioration populaire, lors de l'utilisation de l'ancienne version de l'ancienne version ou de ne pas soutenir cette réparation, elle doit encore faire attention à ce problème.

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:
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