c #
Réutilisation des variables de cycle: un problème laissé de l'histoire foreach
Lorsque vous utilisez l'expression de lambda ou la méthode anonyme, la réutilisation de la variable cyclable
foreach
L'émergence de ce comportement spécial est dû au fait que la variable de circulation est déclarée en dehors du domaine circulant, comme le montre la conversion de code ci-dessous:
Bien que certaines personnes affirment que les variables déclarer en dehors du cycle n'apporteront pas des avantages de performance, il ne peut être utile d'y accéder qu'une fois le cycle terminé, mais cette méthode peut provoquer de graves erreurs en raison du problème de fermeture.
<code class="language-c#">string s; while (enumerator.MoveNext()) { s = enumerator.Current; ... }</code>
Contrairement au cycle FOR, la portée variable de la boucle FOR est à l'intérieur du cycle. Cette incohérence augmente les risques d'erreur inutiles et rend le débogage difficile.
Bien que ce choix de conception puisse être fait avant l'introduction de l'expression de Lambda et des méthodes anonymes, elle n'a pas été modifiée et il apportera toujours des problèmes aux développeurs. foreach
a reconnu ce défaut de conception, C # 5 a introduit un changement majeur pour le résoudre. Les variables circulaires agissent désormais logiquement à l'intérieur du corps du cycle. Cela signifie que la fermeture capturera la nouvelle copie de la variable à chaque itération, éliminant ainsi le problème de fermeture modifié.
Cependant, la boucle FOR restera inchangée et le changement ne sera pas retracé à la première version C #. Par conséquent, les développeurs devraient continuer à fonctionner attentivement lorsque vous utilisez le cycle avec l'expression de Lambda ou la méthode anonyme. foreach
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!