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?
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.
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
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!