c # Wechselproblem

7

Ich bin neu in der Programmierung und habe ein Problem mit dem folgenden Code:

%Vor%

Der Compiler sagt: Verwendung der nicht zugewiesenen lokalen Variable 'alphaChar'

Aber ich weise es in meinem Schaltblock zu.

Ich bin sicher, das ist meine Schuld, weil ich nicht genug über Programmierung weiß.

Bitte beraten.

Danke.

    
iTEgg 27.12.2009, 16:28
quelle

8 Antworten

34

Sie ordnen es zu, wenn x 0-9 ist. Was würden Sie erwarten, wenn x 123 wäre? Während Sie vielleicht wissen, dass nur Werte zwischen 0 und 9 übergeben werden, muss der Compiler das nicht - also es muss überlegen, was sonst passieren würde.

Eine Möglichkeit, dies zu vermeiden, ist die Verwendung von default case in Ihrer switch-Anweisung, mit der Sie eine Ausnahme auslösen können, wenn der Wert nicht im erwarteten Bereich liegt:

%Vor%

Hier ist eine etwas einfachere Alternative, die Ihre switch-Anweisung komplett entfernt:

%Vor%

Beachten Sie, dass Sie vorsichtig vorgehen müssen, wenn Sie eine solche Arithmetik verwenden. In Java und C # ist die zugrundeliegende Darstellung garantiert Unicode, was das Leben viel einfacher macht. Ich glaube, es ist in Ordnung für solche Dinge (und Hex-Parsing / Formatierung), aber wenn Sie in exotischere Szenarien wagen, würde es scheitern. Andererseits gilt das auch für viele Techniken zur Code-Vereinfachung. Wenn sie unangemessen angewendet werden, endet die Sache mit einem Durcheinander.

    
Jon Skeet 27.12.2009, 16:31
quelle
2

Der Compiler beschweren sich, weil alphaChar möglicherweise undefiniert ist - wenn es nicht einer der Werte in Ihrem switch ist, dann wurde es nicht definiert. Sie können eines der folgenden Dinge tun:

  • Legen Sie einen Anfangswert von char fest, der ausgeführt wird, wenn keine der Umschaltbedingungen wahr ist.
  • Fügen Sie Ihrer switch-Anweisung eine "default" -Klausel hinzu.
kdt 27.12.2009 16:32
quelle
2

Vor der ersten Verwendung muss die lokale Variable eindeutig zugewiesen werden (gemäß C # -Spezifikationsregeln). In diesem speziellen Fall garantiert switch construct nicht, dass alphaChar definitiv einem Compilerfehler zugewiesen wird. Sie können AlphaChar einen Anfangswert zuweisen und somit wird es definitiv zugewiesen.

    
Dzmitry Huba 27.12.2009 16:33
quelle
2

Sie müssen Ihrer switch-Anweisung einen Standardwert hinzufügen.

Der Compiler gibt an, dass es Fälle gibt, die der Variablen keinen Wert zuweisen. Also

hinzufügen %Vor%

sagt dem Compiler "falls ich ein Szenario verpasse, mache den Wert this"

oder wenn Sie keinen Standardwert zuweisen möchten:

%Vor%

Das ist nicht unbedingt besser, aber ein anderer Weg, es zu tun:

%Vor%     
kemiller2002 27.12.2009 16:31
quelle
1

Sie weisen der Variablen alphaChar basierend auf einer Bedingung einen Wert zu. Stellen Sie sich ein Szenario vor, in dem die Variable x einen anderen Wert als 0 bis 9 enthält. Angenommen, es enthält 10. Dann wird keine der Fallbedingungen von x erfüllt, daher wird alphaChar als Ergebnis kein Wert zugewiesen es wird völlig uninitialisiert sein. Wenn Sie also alphaChar in eine Zeichenfolge konvertieren, konvertiert sie einen Wert in eine Zeichenfolge und gibt sie an die aufrufende Methode zurück. Dies ist der Grund, warum Sie diese Nachricht erhalten.

Wenn Sie eine einfache Lösung erhalten möchten, fügen Sie den folgenden Code unter

hinzu %Vor%

-

%Vor%

und checken Sie die aufrufenden Methoden ein, ob diese alphaCoords -Funktion Null zurückgibt oder nicht, wie dies -

%Vor%

Auf diese Weise wird Ihr Code nicht zu komplex sein, oder Sie müssen keine Ausnahmen oder etwas Ähnliches werfen oder behandeln.

Hoffe, dass hilft:).

    
MD Sayem Ahmed 09.01.2010 16:57
quelle
0

Der Compiler kann nicht wissen, dass die Variable x nur Zahlen bis zu 9 enthalten kann (das ist, was Sie in switch einchecken). Da der Fall default in Ihrem Switch fehlt, kann vorkommen , dass alphaChar nicht zugewiesen bleibt. Sie können entweder einen default case hinzufügen oder der Variablen einen Wert vor dem switch zuweisen.

    
Joey 27.12.2009 16:31
quelle
0

Fügen Sie Ihrem Switch einen Standard hinzu, denn wenn x 10 ist, wird alphaChar niemals zugewiesen.

    
Yuriy Faktorovich 27.12.2009 16:31
quelle
0

Nachdem Sie die Variable char alphaChar deklariert haben, sollten Sie ihr einen Wert "zuweisen" (setzen Sie ihn auf einen Wert), obwohl Sie erwarten, dass er in der switch-Anweisung einen Wert erhält.

Sie könnten ihm 'A' oder '0' oder so ziemlich alles zuweisen.

Das können Sie in der Deklaration so machen

%Vor%

Oder Sie können es separat machen

%Vor%     
DOK 27.12.2009 16:32
quelle