c # 5.0 Capture Cosetures in Loops: Différences entre pour les boucles et les boucles foreach
question:
En C # 5.0, la fermeture de capture dans la boucle FOREEAC peut être capturée correctement, mais pourquoi la fermeture de capture dans la boucle pour les problèmes?
répondre:
Logiquement parlant, le comportement des fermetures dans une boucle est raisonnable. Après avoir décomposé la boucle pour ses composants (initialiseur, condition, itérateur et corps), l'initialisateur ne s'exécute qu'une seule fois. Par conséquent, il est logique d'avoir une seule "instanciation variable".
En outre, dans la boucle FOR, la valeur initiale de la variable pour chaque itération n'est pas prédéterminée. Considérez l'exemple suivant:
for (int i = 0, j = 10; i Console.WriteLine(i, j);
action();
}
Dans cette boucle, la valeur de J peut changer pendant la boucle. Quel est le comportement attendu dans ce cas?
En revanche, la boucle foreach semble déclarer une nouvelle variable pour chaque itération, et cette variable est en lecture seule. Par conséquent, il est raisonnable de penser à une boucle Forach comme déclarant une variable en lecture seule dans chaque itération dont la valeur est tirée de l'itérateur. Cela explique pourquoi les fermetures peuvent être capturées correctement dans la boucle foreach.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3