2009-02-17 8 views
52

Ich verwende eine Or Anweisung in meinem Fall Ausdruck.Was ist die VB.NET Select-Case-Anweisung Logik mit Case OR-ing?

Obwohl ich einen Wert innerhalb dieses Bereichs habe, fand es keine Übereinstimmung. Warum nicht?

Beispielcode:

Select Case 2 
    Case 0 
     ' Some logic 

    Case 1 
     ' Some other logic 

    Case 2 Or 3 
     Console.WriteLine("hit") 

End Select 

Mit der oben würde ich davon ausgehen, dass hit gedruckt werden würde, aber das ist nicht der Fall.

Antwort

87

den Komma-Operator Use Case-Anweisungen

Select Case 2 
    Case 0,1,2,3 
     Console.WriteLine("hit") 
End Select 
+0

meine Absicht ist nicht für Fall 0 und 1 zu durchfallen. Aber das Komma ist, was ich suchte. – Llyle

+0

@ downvoter, vorsichtig zu erklären? – JaredPar

+3

-1, weil es die Frage nicht wie angegeben beantwortet. Es gibt vielmehr eine alternative Lösung zu dem vom Fragesteller versuchten. Die Frage ist: Wie interpretiert VB den ODER-Operator in einer Select-Anweisung? Andernfalls muss die Frage bearbeitet werden, um der Antwort zu entsprechen. Aber ich würde das nicht vorschlagen, weil @JohnT die richtige Antwort gegeben hat. – systemovich

3

Damit können Sie "etwas" bei 0, "etwas anderes" bei 1, "Treffer" bei 2 oder 3 oder "sonst".

Select Case 2 
    Case 0 
     Console.WriteLine("something") 
    Case 1 
     Console.WriteLine("something else") 
    Case Is 2 To 3 
     Console.WriteLine("hit") 
    Else 
     Console.WriteLine("hit else") 
End Select 
9

Edit: Es scheint, ich in der Annahme falsch war, dass VB.NET nicht Fall ORing ermöglichen. Ich dachte in C# und IL und es scheint, dass ich falsch lag.

jedoch, wie jemand darauf hingewiesen, der Grund, warum der Code nicht war nicht funktioniert, weil Fall 2 oder 3 wurde 2 oder 3 als eine bitweise Auswertung oder und damit die Bewertung 3.

Zur Klarstellung zur Sache:


     2 binary = 0000 0010 
     3 binary = 0000 0011 
    2 Or 3 binary = 0000 0011 (= 3) 

Ich denke jedoch, dass ich darauf hinweisen sollte, dass man aus Gründen der Leistung solche Konstrukte nicht verwenden sollte. Wenn der Compiler auf Select-Anweisungen stößt (in C# wechseln), wird er versuchen, sie mithilfe von Nachschlagetabellen und dem MSIL-Befehl zu kompilieren, aber in dem Fall, in dem Sie etwas wie den Compiler haben ist nicht in der Lage, das in eine Nachschlagetabelle zu konvertieren, und es muss eine Reihe von Vergleichen verwenden (was wie If .. Else ist).

Der Punkt ist, dass, um die Select-Anweisung wirklich nutzen zu können, die Fälle in diesem Sinne entwickelt werden sollten. Ansonsten ist der einzige Vorteil die Lesbarkeit des Codes.

Ein gut entworfener Schalter ist eine O (1) -Operation, während ein schlecht konstruierter Schalter (der einer Reihe von If..Then..Else-Anweisungen entspricht) eine O (n) -Operation ist.

+0

Danke, das erlaubt meinem Geist, sich jetzt auszuruhen. Den Code logisch zu lesen gab mir keine Hinweise darauf, dass ich etwas falsch gemacht habe. – Llyle

+0

Ich bin froh, dass du die Antwort auf das Problem gefunden hast, das du lösen wolltest und ich hoffe, dass die Klarstellungen, die ich meiner Antwort hinzugefügt habe, dir helfen werden, bessere Select-Anweisungen zu erstellen :) – user67143

19

JaredPar hat es richtig zu begrenzen, aber Sie können das auch

Select Case 2 
    Case 0,1 
    Case 2 To 3 
     Console.WriteLine("Hit") 
End Select 

Dies würde 0 oder 1 zu konstruieren, benutzen, nichts tun, 2 oder 3 Druck Hit ... Die zu konstruieren, ist ein Bereich ...

Here's the MSDN

+0

Wahr, und ich benutzte das To-Schlüsselwort, aber es ist ein bisschen hacky, wenn 2 und 3 Enum vals waren und die Enum refaktorisiert wird, ohne diesen Nutzen in Betracht zu ziehen - was wenn es in einer Klasse tief im Inneren eines großen Systems ist - dann hast du einige unerwartete Pausen;) – Llyle

23

Als Jared sagte, Sie müssen den Komma-Operator verwenden, um Case-Anweisungen zu begrenzen.

Die Or, die Sie taten, ist ein bitweises ODER, was dazu führt, dass es "3" ist. Komischerweise hätte "2 UND 3" wahrscheinlich für Ihren speziellen Fall funktioniert.

Verwandte Themen