Errore del compilatore CS0136

Aggiornamento: novembre 2007

Messaggio di errore

Una variabile locale denominata 'var' non può essere dichiarata in quest'ambito perché darebbe un significato diverso a 'var', che è già utilizzato in un ambito 'padre o corrente/figlio' per identificare qualcos'altro.
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

Una dichiarazione di variabile nasconde un'altra dichiarazione che altrimenti si troverebbe nell'ambito corrente. Rinominare la variabile dichiarata nella riga che ha generato l'errore CS0136.

Esempio

Il seguente codice di esempio genera l'errore CS0136:

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

Da Specifiche del linguaggio C#, sezione 7.5.2.1:

Per ogni occorrenza di un identificatore specificato come nome semplice in un'espressione o un dichiaratore, all'interno dello spazio della dichiarazione di variabile locale (§CNDJ6nn5us4RjIIAqgBLqQsCAAAACAAAAA4AAABfAFIAZQBmADQANgAxADYAMgAyADEAMwA4AAAA REF _Ref461622138 \r \h 3.3) che include immediatamente quell'occorrenza, ogni altra occorrenza dello stesso identificatore come nome semplice in un'espressione o dichiaratore deve fare riferimento alla stessa entità. Questa regola assicura che il significato di un nome sia sempre lo stesso all'interno di un blocco specificato, un blocco switch, un'istruzione for, foreach o using o una funzione anonima.