Portée de la variable C# : pourquoi le compilateur confond-il 'x' ?
L'extrait de code C# suivant :
<code class="language-csharp">if (true) { string var = "VAR"; } string var = "New VAR!";</code>
Déclarer la variable 'var' pour la deuxième fois dans une portée externe génère l'erreur suivante :
Erreur 1 : Une variable locale nommée 'var' ne peut pas être déclarée dans cette portée car elle aurait une signification différente de celle 'var' qui est déjà utilisée pour représenter autre chose dans la portée "enfant".
Cette erreur se produit car C# applique des règles de portée strictes qui empêchent les variables portant le même nom d'être redéclarées dans des portées qui se chevauchent. Bien que la première déclaration « var » soit limitée à la portée interne et semble n'avoir aucun effet sur la portée externe, le compilateur traite les deux instances comme étant dans la même portée.
Le problème vient des limitations de la conception du compilateur. Il analyse les variables uniquement en fonction de leur portée, quel que soit l'ordre dans lequel elles sont déclarées ou utilisées. Donc, le code théoriquement valide suivant :
<code class="language-csharp">string var = "New VAR!"; if (true) { string var = "VAR"; }</code>
Le compilateur le considère également comme invalide.
Pour résoudre cette ambiguïté, il est recommandé d'utiliser des noms de variables différents ou d'utiliser des portées sœurs :
<code class="language-csharp">string varOuter = "New VAR!"; if (true) { string varInner = "VAR"; }</code>
Bien que les portées frères et sœurs soient techniquement valides, elles peuvent prêter à confusion et ne sont généralement pas recommandées. Il est également préférable de renommer les variables, ce qui permet de distinguer les variables de différentes portées.
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!