Ошибка компилятора 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 имя всегда имеет одинаковое значение.