Capture de fermeture (variables de boucle) en C# 5.0
Question :
En C# 5.0, les problèmes de capture des fermetures dans les boucles foreach ont été résolus, garantissant ainsi que les valeurs correctes des variables de boucle sont capturées. Cependant, le même problème existe toujours dans la boucle for. Pourquoi ce problème n’est-il pas résolu pour les deux types de boucles ?
Réponse :
Le comportement existant dans la boucle for est logiquement valable. Bien qu'une boucle foreach soit similaire à la déclaration d'une nouvelle variable pour chaque itération, une boucle for a une structure unique, comprenant un initialiseur, des conditions, des itérateurs et un corps.
L'initialiseur dans la boucle for n'est exécuté qu'une seule fois, il est donc logique de faire "l'instanciation de variable" une seule fois. De plus, il n'y a aucune hypothèse inhérente sur la valeur « initiale » de la variable pour chaque itération de boucle.
Considérons l'exemple suivant :
<code class="language-C#">for (int i = 0, j = 10; i < 5; i++, j--) { Action action = () => Console.WriteLine(i, j); action(); }</code>
Dans ce cas, si vous résolvez ce problème pour une boucle for, il sera difficile de déterminer son comportement.
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!