2013-08-09 11 views
5

Mam następujący kodDlaczego kompilator C# generuje błąd kompilacji?

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

Erorr: lokalna zmienna o nazwie „b” nie mogą być zadeklarowane w tym zakresie, ponieważ dałoby to inny sens „B”, który jest już stosowany w ramach danej „dziecko” do oznaczają coś innego

Ok, edytując

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

Error: Nazwa 'b' nie istnieje w bieżącym kontekście

+2

+1: Pierwszy błąd kompilatora zawsze mnie zaintrygował. –

+4

Wygląda to na następujący wpis na stronie: http://stackoverflow.com/questions/6156449/why-cant-a-duplicate-variable-name-be-declared-in-a-sted-local-scope – DarkKnight

+0

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

Odpowiedz

1

możesz to zrobić?

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

Odpowiedź jest NO co oznacza, że ​​prawie wszędzie spójne. Teraz nasuwa się pytanie, dlaczego. Odpowiedź Na to pytanie jest niezgodne z prawem posiadanie dwóch zmiennych lokalnych o tej samej nazwie w tym samym miejscu deklaracji zmiennej lokalnej lub zagnieżdżonych przestrzeni deklaracji zmiennych lokalnych. W powyższym przypadku deklaracja J mieści się w tym samym zakresie zagnieżdżonym.

+0

Tak ... kaskada zmiennych o zakresie. Możesz uzyskać dostęp do zmiennej o zakresie z dowolnego zakresu podrzędnego zakresu zmiennych ... To dużo "zakresu" ... – gislikonrad

-2

Poprawny kod powinien być:

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

Nie można użyć zmiennej zadeklarowanej wewnątrz bloku ({}) poza tym bloku.

+0

To nie jest pytanie. –

8

"Lokalna deklaracja zmiennych w bloku zawiera wszystkie zagnieżdżone bloki, dlatego w bloku zagnieżdżonym nie można zadeklarować zmiennej lokalnej o tej samej nazwie, co zmienna lokalna w bloku obejmującym." Variable Scopes, MSDN

Powiązane problemy