Erreur du compilateur CS0136
Mise à jour : novembre 2007
Message d'erreur
Une variable locale nommée 'var' ne peut pas être déclarée dans cette portée, car elle modifierait la signification de 'var', déjà utilisée dans une portée 'parente ou actuelle/enfant' pour désigner autre chose
A local variable named 'var' cannot be declared in this scope because it would give a different meaning to 'var', which is already used in a 'parent or current/child' scope to denote something else
Une déclaration de variable masque une autre déclaration qui serait normalement dans la portée. Renommez la variable qui est déclarée sur la ligne qui a généré l'erreur 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++;
}
}
}
Issu de Spécifications du langage C#, Section 7.5.2.1 :
Pour chaque occurrence d'un identificateur donné en tant que simple-name dans une expression ou un déclarateur, dans l'espace de déclaration de variable locale (§CNDJ6nn5us4RjIIAqgBLqQsCAAAACAAAAA4AAABfAFIAZQBmADQANgAxADYAMgAyADEAMwA4AAAA REF _Ref461622138 \r \h 3.3) englobant immédiatement cette occurrence, toute autre occurrence du même identificateur en tant que simple-name dans une expression ou un déclarateur doit faire référence à la même entité. Cette règle garantit que la signification d'un nom est toujours la même dans un bloc donné, un bloc switch, une instruction for, foreach ou using ou une fonction anonyme.