Select...Case-Anweisung (Visual Basic)
Führt je nach dem Wert eines Ausdrucks eine von mehreren Anweisungsgruppen aus.
Select [ Case ] testexpression
[ Case expressionlist
[ statements ] ]
[ Case Else
[ elsestatements ] ]
End Select
Teile
Begriff |
Definition |
testexpression |
Erforderlich. Ausdruck. Muss einem der elementaren Datentypen entsprechen (Boolean, Byte, Char, Date, Double, Decimal, Integer, Long, Object, SByte, Short, Single, String, UInteger, ULong und UShort). |
expressionlist |
In einer Case-Anweisung erforderlich. Eine Liste von Ausdrucksklauseln, die Vergleichswerte für testexpression darstellen. Mehrere Ausdrucksklauseln werden durch Komma voneinander getrennt. Eine Klausel kann folgendermaßen strukturiert sein:
Mit dem To-Schlüsselwort geben Sie die Begrenzungen eines Bereichs von Vergleichswerten für testexpression an. Der Wert von expression1 muss kleiner oder gleich dem Wert von expression2 sein. Verwenden Sie das Is-Schlüsselwort mit einem Vergleichsoperator (=, <>, <, <=, > oder >=) um eine Einschränkung der Vergleichswerte für testexpression anzugeben. Wenn das Is-Schlüsselwort nicht angegeben wird, wird es automatisch vor dem Vergleichsoperator eingefügt. Die Variante, in der nur expression angegeben wird, wird als Sonderfall der Is-Variante behandelt, bei dem der Vergleichsoperator das Gleichheitszeichen (=) ist. Diese Variante wird als testexpression = expression ausgewertet. Die Ausdrücke in expressionlist können einen beliebigen Datentyp aufweisen, vorausgesetzt, sie können implizit in den Datentyp von testexpression konvertiert werden, und der entsprechende comparisonoperator ist für die beiden verwendeten Datentypen gültig. |
statements |
Optional. Eine oder mehrere Anweisungen nach Case, die ausgeführt werden, wenn testexpression mit einer beliebigen Klausel in expressionlist übereinstimmt. |
elsestatements |
Optional. Eine oder mehrere Anweisungen nach Case Else, die ausgeführt werden, wenn testexpression mit keiner Klausel in der expressionlist einer der Case-Anweisungen übereinstimmt. |
End Select |
Beendet die Definition der Select...Case-Konstruktion. |
Hinweise
Wenn testexpression mit einer Case expressionlist-Klausel übereinstimmt, werden die Anweisungen nach dieser Case-Anweisung bis zur nächsten Anweisung Case, Case Else oder End Select ausgeführt. Anschließend setzt das Programm die Ausführung mit der Anweisung fort, die auf End Select folgt. Wenn testexpression in mehreren Case-Klauseln mit einer expressionlist-Klausel übereinstimmt, werden nur die Anweisungen nach der ersten Übereinstimmung ausgeführt.
Die Case Else-Anweisung wird zum Einführen der elsestatements verwendet, die ausgeführt werden, wenn in keiner der anderen Case-Anweisungen eine Übereinstimmung zwischen testexpression und einer expressionlist-Klausel gefunden wird. Es ist zwar nicht erforderlich, doch empfiehlt es sich, in der Select Case-Konstruktion über eine Case Else-Anweisung zu verfügen, um unvorhergesehene testexpression-Werte zu behandeln. Wenn keine Case expressionlist-Klausel mit testexpression übereinstimmt und keine Case Else-Anweisung vorhanden ist, wird die Steuerung an die Anweisung übergeben, die auf End Select folgt.
Sie können in jeder Case-Klausel mehrere Ausdrücke oder Bereiche verwenden. Die folgende Zeile ist beispielweise gültig.
Case 1 To 4, 7 To 9, 11, 13, Is > maxNumber
Hinweis
Das in der Case-Anweisung und der Case Else-Anweisung verwendete Is-Schlüsselwort ist nicht mit dem Is-Operator (Visual Basic) identisch, der für den Vergleich von Objektverweisen verwendet wird.
Sie können Bereiche und mehrere Ausdrücke für Zeichenfolgen angeben. Im folgenden Beispiel stimmt Case mit jeder Zeichenfolge überein, die genau mit "apples" übereinstimmt, einen Wert zwischen "nuts" und "soup" in alphabetischer Reihenfolge aufweist oder über genau denselben Wert wie der aktuelle Wert von testItem verfügt.
Case "apples", "nuts" To "soup", testItem
Die Einstellung von Option Compare kann sich auf den Zeichenfolgenvergleich auswirken. Bei einem Vergleich unter Verwendung von Option Compare Text sind die Zeichenfolgen "Apples" und "apples" gleich, doch nicht unter Verwendung von Option Compare Binary.
Hinweis
Eine Case-Anweisung mit mehreren Klauseln kann ein Verhalten aufweisen, das als Kurzschluss bezeichnet wird.Visual Basic wertet die Klauseln von links nach rechts aus, und wenn eine Klausel eine Übereinstimmung mit testexpression ergibt, werden die restlichen Klauseln nicht ausgewertet.Durch Kurzschlussverhalten kann die Leistung erhöht werden, doch kann es zu unerwarteten Ergebnissen führen, wenn Sie davon ausgehen, dass jeder Ausdruck in expressionlist ausgewertet wird.Weitere Informationen über Kurzschlussverhalten finden Sie unter Boolesche Ausdrücke (Visual Basic).
Wenn der Code in einem Case-Anweisungsblock oder einem Case Else-Anweisungsblock keine weiteren Anweisungen in dem Block ausführen muss, kann er den Block mithilfe der Exit Select-Anweisung beenden. Dadurch setzt das Programm die Ausführung sofort mit der Anweisung fort, die auf End Select folgt.
Select Case-Konstruktionen können geschachtelt werden. Für jede geschachtelte Select Case-Konstruktion muss eine entsprechende End Select-Anweisung vorhanden sein, und sie muss sich vollständig in einem einzelnen Case-Anweisungsblock oder Case Else-Anweisungsblock der äußeren Select Case-Konstruktion befinden, in dem sie geschachtelt ist.
Beispiel
Im folgenden Beispiel wird mit einer Select Case-Konstruktion eine Zeile geschrieben, die dem Wert der number-Variablen entspricht. Die zweite Case-Anweisung enthält den Wert, der dem aktuellen Wert von number entspricht, sodass die Anweisung ausgeführt wird, die "Between 6 and 8, inclusive" schreibt.
Dim number As Integer = 8
Select Case number
Case 1 To 5
Debug.WriteLine("Between 1 and 5, inclusive")
' The following is the only Case clause that evaluates to True.
Case 6, 7, 8
Debug.WriteLine("Between 6 and 8, inclusive")
Case 9 To 10
Debug.WriteLine("Equal to 9 or 10")
Case Else
Debug.WriteLine("Not between 1 and 10, inclusive")
End Select