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 ?

Pourquoi C# signale-t-il les erreurs de portée variable dans les boucles imbriquées et comment les « accolades invisibles » affectent-elles cela ?

DDD
Libérer: 2025-01-12 14:02:43
original
797 Les gens l'ont consulté

Erreurs à portée variable et solutions dans les boucles imbriquées C#

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.

Exemple de code 1

<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>
Copier après la connexion

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.

Exemple de code 2

<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>
Copier après la connexion

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.

Why Does C# Report Variable Scope Errors in Nested Loops, and How Do

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal