2013-08-09 3 views
5

я следующий кодПочему компилятор C# генерирует ошибку компиляции?

using(some code) 
{ 
var b = .... 
} 
var b = ... 

Erorr: Локальная переменная с именем «Ъ» не может быть объявлен в этой области, поскольку это дало бы иной смысл «Ъ», который уже используется в область видимости «ребенка» обозначают что-то еще

Ok, редактирование

using(some code) 
{ 
var b = .... 
} 
b = ... 

Error: название 'Ъ' не существует в текущем контексте

+2

+1: Первая ошибка компилятора всегда меня озадачила. –

+4

Это выглядит следующим образом на SO: http://stackoverflow.com/questions/6156449/why-cant-a-duplicate-variable-name-be-declared-in-a-nested-local-scope – DarkKnight

+0

http : //stackoverflow.com/questions/4649947/why-doesnt-c-sharp-allow-me-to-use-the-same-variable-name-in-different-scopes – Karthik

ответ

1

Вы можете это сделать?

for (int i = 0; i < 10; i++) 
{ 
    int j = 1; 
} 
int j = 2; 

Ответ НЕТ, который означает, что он в значительной степени соответствует везде. Теперь он задает вопрос, почему. Ответ на этот вопрос: незаконно иметь две локальные переменные с тем же именем в одном и том же локальном пространстве декларации переменных переменных или в пространствах вложенных локальных переменных. И в приведенном выше случае объявление J находится в пределах одной и той же вложенной области.

+0

Да ... скопированные переменные каскад. Вы можете получить доступ к переменной с областью действия из любой дочерней области области видимости переменных ... Это много «области» ... – gislikonrad

-2

Правильный код должен быть:

var b = something; 
using(some code) 
{ 
    b = smth; 
} 
b = smth; 

Вы не можете использовать переменные, объявленные внутри блока ({}) за пределами этого блока.

+0

Это не вопрос. –

8

«Локальное пространство декларации переменных блока содержит любые вложенные блоки. Таким образом, внутри вложенного блока невозможно объявить локальную переменную с тем же именем, что и локальная переменная в закрывающем блоке». Variable Scopes, MSDN

Смежные вопросы