Maison >développement back-end >C++ >Pourquoi C# signale-t-il les erreurs de portée variable dans les boucles imbriquées et comment les « accolades invisibles » affectent-elles cela ?
Cet article explore en profondeur la complexité de la portée variable en C# et analyse deux exemples de code pour expliquer les questions soulevées par le comportement de la portée variable.
<code class="language-c#">public void MyMethod() { int i = 10; for (int x = 10; x < 20; x++) { int i = x; // Point1: 变量i在此处重新声明 object objX = new object(); // Point2: 变量objX在此处重新声明 } object objX = new object(); }</code>
Comme prévu, une erreur est signalée au Point1 en raison de la redéclaration de la variable i à l'intérieur de la boucle for. Cette erreur provient d'une règle de base qui ne permet pas d'utiliser des variables portant le même nom dans le même espace de déclaration de variables locales ou dans des espaces de déclaration de variables locales imbriquées.
Cependant, l'erreur au Point2 peut prêter à confusion. La variable objX est déclarée en dehors de la boucle for, mais le compilateur signale toujours l'erreur. C'est là qu'intervient le concept d'« accolades implicites ».
En C#, chaque boucle for est considérée comme étant entourée d'accolades implicites. Par conséquent, une variable objX déclarée en dehors d’une boucle for est considérée comme faisant partie de la portée du corps de la boucle for. Puisqu'une autre variable objX est déclarée dans la boucle for, cela viole la règle interdisant la réutilisation des noms de variables dans la même portée.
<code class="language-c#">public void MyMethod() { for (int i = 10; i < 20; i++) { // ... } for (int i = 10; i < 20; i++) { // ... } for (int objX = 10; objX < 20; objX++) { // ... } for (int objX = 10; objX < 20; objX++) { // ... } }</code>
Dans l'exemple de code 2, il n'y a plus d'erreurs de compilation. En effet, chaque boucle for possède son propre ensemble d'accolades implicites, créant différentes portées pour les variables i et objX dans chaque boucle. Par conséquent, les variables portant le même nom ne sont utilisées que dans la portée isolée de leurs boucles for respectives, soumises aux règles de portée des variables.
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!