Partager via


Erreur du compilateur CS0136

Une variable locale nommée « var » ne peut pas être déclarée dans cette étendue, car elle donnerait une signification différente à « var », qui est déjà utilisée dans une étendue « parent ou current/child » pour désigner quelque chose d’autre

Une déclaration de variable masque une autre déclaration qui serait autrement dans le champ d'application. Renommez la variable déclarée sur la ligne qui a généré CS0136.

Exemple :

L’exemple suivant génère l’erreur CS0136 :

// CS0136.cs  
namespace MyNamespace  
{  
   public class MyClass  
   {  
      public static void Main()  
      {  
         int i = 0;  
         {  
            char i = 'a';   // CS0136, hides int i  
         }  
         i++;  
      }  
   }  
}  

Le compilateur signale cette erreur, quel que soit l’ordre textuel des déclarations de variable, comme illustré dans l’exemple suivant :

// CS0136.cs  
namespace MyNamespace  
{  
   public class MyClass  
   {  
      public static void Main()  
      {
         if (true)
         {  
            int i = 1;   // CS0136, hides i outside this block
         }
         int i = 0;   
         i++;  
      }  
   }  
}  

À partir de la spécification du langage C# :

Il est interdit pour un espace de déclaration de variable locale et un espace de déclaration de variable locale imbriqué d'avoir des éléments portant le même nom. Par conséquent, dans un espace de déclaration imbriqué, il n’est pas possible de déclarer une variable locale ou une constante portant le même nom qu’une variable locale ou une constante dans un espace de déclaration englobant. Deux espaces de déclaration peuvent contenir des éléments qui portent le même nom à condition qu’aucun des deux espaces ne contienne l’autre.