Поделиться через


Ошибка компилятора CS0136

Обновлен: Ноябрь 2007

Сообщение об ошибке

Локальная переменная var не может быть объявлена в этой области, поскольку при этом ей будет присвоено другое значение, в то время как эта переменная уже используется в области parent or current/child для обозначения другого элемента
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

Объявление переменной скрывает другое объявление, которое в противном случае присутствовало бы в области. Переименуйте переменную, объявленную в строке, которая создала ошибку CS0136.

Пример

В следующем примере возникает ошибка CS0136.

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

Из Спецификация языка C#, раздел 7.5.2.1:

Для каждого вхождения данного идентификатора в качестве простого имени в выражении или в деклараторе, в пространстве объявлений локальной переменной (§CNDJ6nn5us4RjIIAqgBLqQsCAAAACAAAAA4AAABfAFIAZQBmADQANgAxADYAMgAyADEAMwA4AAAA REF _Ref461622138 \r \h 3.3), непосредственно включающем это вхождение, каждое следующее вхождение того же идентификатора в качестве простого имени в выражении или в деклараторе должно ссылать на ту же сущность. Это правило позволяет гарантировать, что внутри определенного блока, блока switch, а также операторов for, foreach и using имя всегда имеет одинаковое значение.