2016-04-27 30 views
2

Helloo, alle. Ich habe ein Problem mit der If-Anweisung. Wo liege ich falsch?C# - Fehler bei der Variablen in der IF-Anweisung

int cnt = 0; 
int wayListNums; 

foreach (TableRow tr in allVisibleRows) 
{ 

    SPListItem itemAdd = wayList.Items.Add(); 

    if (cnt == 0) 
    { 
     wayListNums = itemAdd.ID; 
    }  

    itemAdd["wayNum"] = "WayBill № " + " " + wayListNums; 

    ................... 

Dies wird folgende Fehlermeldung:

Fehler 1: Verwendung von nicht zugewiesenen lokalen Variablen 'wayListNums' ....

+1

ersetzen int wayListNums int; mit int wayListNums = 0; –

+1

Sie müssen WayListNums einen Wert zuweisen, bevor Sie es verwenden. Denken Sie darüber nach, was passieren würde, wenn cnt in der ersten Schleifeniteration nicht gleich 0 ist. – TimS

+0

Möglich [duplizieren] (http://stackoverflow.com/questions/9233000/why-compile-error-use-of-unassigned-local-variable). Finden Sie die Ursache des Fehlers klar und versuchen Sie es zu beheben. Das Problem tritt nicht mit der if-Anweisung auf, wie Sie im Titel erwähnt haben. –

Antwort

0

Der Compiler über die Werte in der Sammlung nicht sicher allVisibleRows manchmal Sie kann null oder leer sein (die Variable get wird nur dann abgerufen, wenn die Sammlung nicht leer ist, und if (cnt == 0) wird als wahr ausgewertet.) In solchen Situationen ist der Wert wayListNums unbekannt. Dies ist der Grund für die Warnung. Um dieses Problem zu überwinden, Initialisieren Sie die Variable vor dem Gebrauch:

int wayListNums=0;// or some other value 

Damit der Standardwert verwendet wird, wenn andere Bedingungen gescheitert.

0

Sie müssen zugewiesenen Standardwert lokalen variable..as Fehler deuten darauf hin, es nicht zugewiesen ist .. hier int wayListNums = 0;// because of int default value 0

2

Das Problem hierbei ist, dass wayListNums keinen Standardwert hat, wenn es erklärt wird. Später setzen Sie den Wert nur in if block. Wenn also if nicht ausgeführt wird, bleibt die Variable nicht zugewiesen, wie der Fehler Ihnen sagt.

So haben Sie 2 Möglichkeiten:

  1. einen gewissen Wert für wayListNums auf Erklärung zuordnen.

int wayListNums = 0;

  1. Assure, dass jeder Code Zweig einen gewissen Wert auf die Variable zuweisen, bevor sie Zugriff auf:

// Code

if (cnt == 0) 
    { 
     wayListNums = itemAdd.ID; 
    } 
else 
    { 
     wayListNums = somethingElse; 
    } 
+0

Für den zweiten Punkt: Was nützt die Überprüfung Bedingung dort?true und false states weist der Variable den gleichen Wert zu –

+0

Ich habe die Antwort bearbeitet, sonst sollte offensichtlich ein anderer Wert zurückgegeben werden. Die Idee ist, dass Sie nicht darauf beschränkt sind, den Wert uppon deklaration zuzuweisen, wie Sie es vorgeschlagen haben, Sie können es auch nicht zugewiesen lassen, aber um sicherzustellen, dass jeder Codepfad es vor der Verwendung zugewiesen hat. – 3615

0

In C# und anderen ähnlichen Sprachen erwartet der Compiler, dass der Wert jeder Variablen initialisiert wird, bevor sie verwendet werden kann. In Ihrem Fall ist der Compiler nicht sicher, ob der in if-block initiierte Wert immer initialisiert wird und da Sie ihn außerhalb des Gültigkeitsbereichs dieses if-block verwenden, gibt Ihnen der Compiler einfach einen Fehler, dass der Wert nicht initialisiert wird. Einfaches Setzen

int wayListNums = 0; 

löst das Problem.

0

weist einen Wert

int wayListNums = 0; 
Verwandte Themen