2012-04-03 13 views
1

Ich bin mit einem Problem im Zusammenhang mit dem Umfang der Variablen konfrontiert.Umfang einer Variablen in C#

Code:

int row_no, upflag, downflag; 
     for (int i = count; i > 0; i--) 
     { 
      asd = ds1.Tables[out_table].Rows[i][59].ToString(); 
      int com1 = string.Compare(asd, "Upstream"); 
      int com2 = string.Compare(asd, "Downstream"); 
      if (com1 == 0 || com2 == 0) 
      { 
       row_no = i; 
       if (com1 == 0) 
        upflag = 1; 
       else 
        downflag = 1; 
       break; 
      } 

     } 
     if (upflag == 1)// 
     { 
      string val1 = ds1.Tables[out_table].Rows[count][59].ToString(); 
      string val2 = ds1.Tables[out_table].Rows[(count - 1)][59].ToString(); 
     } 

in diesem Code in der letzten if (UPFLAG == 1) Zustand, zeigt meine VS2010 eine rote Linie unter dem UPFLAG und sagte Verwendung der nicht zugewiesenen lokalen Variablen 'UPFLAG'.

warum ist es so? Es war völlig in Ordnung in C++, aber hier unter mehreren verschachtelten Schleifen/Bedingungen, spiegelt der Wert, der der Variablen innerhalb der Klammern zugewiesen ist, diese nicht zurück, selbst wenn die Variable vor der Schleife deklariert ist.

Bitte helfen

Antwort

3

Überlegen Sie, was, wenn count == 0 passiert. Der Rumpf der for-Schleife wird nicht ausgeführt, und upflag wird kein Wert zugewiesen. Deshalb hat der Compiler "Verwendung von nicht zugewiesenen lokalen Variablen" gesagt - es bedeutet, dass möglich ist, dass die Variable nicht zugewiesen wurde.

Es war völlig in Ordnung in C++

Nein, war es nicht. Der Compiler hat sich vielleicht nicht darüber beschwert, aber es war immer noch undefiniertes Verhalten.

+0

danke, ich habe den Punkt. –

0

mein VS2010 zeigt eine rote Linie unter dem upflag und besagte Verwendung der nicht zugewiesenen lokalen Variable 'upflag'.

Das ist genau dein Problem. Es ist nicht zugewiesen und Sie versuchen, den Wert zu vergleichen.

Initialisieren Sie es zunächst auf einen Wert.

0

ANWENDUNG:

int row_no = 0; // oder irgendein anderer Wert wie -1

int upflag = 0; // oder jeder andere Wert wie -1

int DownFlag = 0; // oder ein beliebiger anderer Wert wie -1

Da diese Werte zunächst initialisiert werden müssen.

0

upflag wird deklariert, aber es wird kein Wert zugewiesen, und es ist nicht garantiert, dass es in der Schleife initialisiert wird (wenn z. B. count 0 ist, wird die Schleife die upflag-Zuweisung nicht treffen).

Versuchen Sie, upflag = 0 als Standardwert festzulegen, wenn Sie es deklarieren.

0

Der Grund dafür, dass der C# -Compiler nicht die Verwendung von nicht initialisierten Variablen ermöglicht. Wenn der Compiler die Verwendung einer Variablen erkennt, die möglicherweise nicht initialisiert wurde, wird ein Kompilierungsfehler generiert.

In C++ zeigt es die Warnmeldung für die gleiche, aber verhindert nicht die Kompilierung des Benutzers. Wenn Sie die Anzahl in der Deklaration initialisieren, wird es funktionieren.