2013-08-09 11 views
5

ich folgenden Code habenWarum C# -Compiler einen Kompilierungsfehler generiert?

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

Erorr: Eine lokale Variable ‚b‘ genannt können in diesem Rahmen erklärt werden, da sie eine andere Bedeutung zu ‚b‘ geben würde, die bereits in einem ‚Kind‘ Umfang verwendet wird, bezeichnen etwas anderes

Ok, Bearbeitung

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

Error: der Name 'b' existiert nicht im aktuellen Kontext

+2

+1: Der erste Compiler Fehler hat mich immer verwirrt. –

+4

Dies sieht im Zusammenhang mit dem folgenden Beitrag auf 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

Antwort

1

können Sie das tun?

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

Die Antwort ist NO, die es ziemlich konsistent überall bedeutet. Jetzt stellt sich die Frage warum. Antwort zu dieser Frage ist Es ist illegal, zwei lokale Variablen mit demselben Namen im selben lokalen Variablen-Deklarationsbereich oder in den geschachtelten lokalen Variablen-Deklarationsspalten zu haben. Und im obigen Fall liegt die Deklaration von J innerhalb desselben verschachtelten Bereichs.

+0

Yeah ... Bereich Variablen Kaskade. Sie können auf eine Bereichsvariable von jedem untergeordneten Bereich des Variablenbereichs zugreifen ... Das ist eine Menge "Geltungsbereich" ... – gislikonrad

-2

Das sollte korrekten Code sein:

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

Sie können eine Variable nicht verwenden innerhalb eines Blocks deklariert ({}), die außerhalb des Blocks.

+0

Das ist nicht die Frage. –

8

"Der lokale Variablendeklarationsbereich eines Blocks enthält alle verschachtelten Blöcke. Daher ist es in einem verschachtelten Block nicht möglich, eine lokale Variable mit demselben Namen wie eine lokale Variable in einem umschließenden Block zu deklarieren." Variable Scopes, MSDN