C # Bereich Frage

8

Betrachten Sie das folgende Codebeispiel:

%Vor%

Dies ergibt den Fehler

  

Eine lokale Variable namens "test" kann in diesem Bereich nicht deklariert werden, da sie "test" eine andere Bedeutung geben würde, die bereits in einem "untergeordneten" Bereich verwendet wird, um etwas anderes zu bezeichnen

Aber ich verstehe nicht warum? Die äußere Testvariable beginnt in Zeile 7 und nicht in Zeile 2. Wo liegt das Problem, eine zweite Variable namens test in Zeile 4 mit einem Bereich zu deklarieren, der in Zeile 5 endet?

    
stefan.at.wpf 30.07.2010, 15:02
quelle

3 Antworten

3

Dies ist eine häufig gestellte Frage. siehe auch:

Lambda-Variablenbereich

C # wird verrückt, wenn ich Variablen mit dem gleichen Namen wie die in einem Lambda deklariere

C # -Variable: 'x' kann in diesem Bereich nicht deklariert werden, da es 'x'

Variable Bereichsverwechslung in C #

Die Antwort lautet: Lesen Sie die Fehlermeldung genauer. Die Fehlermeldung gibt genau an, was das Problem ist: Sie dürfen nicht denselben einfachen Namen verwenden, um zwei verschiedene Dinge im selben Block zu bezeichnen.

Zum Beispiel:

%Vor%

Perfekt legal. Beachten Sie, dass der Bereich des äußeren x den Bereich des inneren x überlappt. Es ist nicht unzulässig, überlappende Bereiche mit demselben Namen im Bereich in beiden zu haben.

Dies ist nicht legal:

%Vor%

Auch hier sind die beiden Bereiche mit einer x-Überlappung vollkommen legal. Was illegal ist, ist, dass der einfache Name x zwei Mittelwert zwei verschiedene Variablen im selben Block verwendet - also innerhalb des äußeren Blocks von M (), der enthält innerer Block von M.

Programme, in denen derselbe einfache Name verwendet ist, um zwei verschiedene Dinge im selben Block zu bedeuten, sind verwirrend und fehleranfällig und sind daher < em> illegal in C #.

Für weitere Details lesen Sie meine Artikel zum Thema:

Ссылка

    
Eric Lippert 30.07.2010, 16:26
quelle
10

Variablen sind innerhalb des Blocks definiert, in dem sie deklariert sind, es spielt keine Rolle, in welcher Zeile sie sich befinden.

Lesen Sie in der C # -Sprachspezifikation Bereiche .

Aus der Spezifikation:

  

Der Bereich einer lokalen Variablen, die in einer lokalen Variablendeklaration deklariert wurde ( Abschnitt 8.5.1 ) ist der Block, in dem die Deklaration stattfindet.

Und:

  

Bereiche können verschachtelt werden, und ein innerer Bereich kann die Bedeutung eines Namens aus einem äußeren Bereich neu deklarieren. (Dies beseitigt jedoch nicht die Einschränkung aus Abschnitt 3.3, dass es in einem verschachtelten Block nicht möglich ist, eine lokale Variable mit demselben Namen wie eine lokale Variable in einem umschließenden Block zu deklarieren.)

    
Oded 30.07.2010 15:04
quelle
0

+1, ich stimme dir zu, aber es ist nicht so, wie die Spezifikation geschrieben ist. Es macht das Schreiben des Compilers einfacher, ich bin mir sicher. Ich denke auch, es könnte argumentiert werden, dass es vorzuziehen ist, dies ohnehin nicht zu tun, um den Code leichter verständlich zu machen.

    
tster 30.07.2010 15:05
quelle

Tags und Links