Istruzione Select...Case (Visual Basic)
Esegue uno dei numerosi gruppi di istruzioni, a seconda del valore di un'espressione.
Sintassi
Select [ Case ] testexpression
[ Case expressionlist
[ statements ] ]
[ Case Else
[ elsestatements ] ]
End Select
Parti
Termine | Definizione |
---|---|
testexpression |
Obbligatorio. Espressione. Deve restituire uno dei tipi di dati elementari (Boolean , Byte , Char , Date , Double , Decimal , Integer , Long , Object , SByte , Short , Single , String , UInteger , ULong , e UShort ). |
expressionlist |
Obbligatorio in un'istruzione Case . Elenco di clausole di espressione che rappresentano valori di corrispondenza per testexpression . Più clausole di espressione sono separate da virgole. Ogni clausola può accettare una delle seguenti forme:- expression1 To expression2- [ Is ] comparisonoperator expression- expression Usare la parola chiave To per specificare i limiti di un intervallo di valori di corrispondenza per testexpression . Il valore di expression1 deve essere minore o uguale al valore di expression2 .Usare la parola chiave Is con un operatore di confronto (= , <> , < , <= , > o >= ) per specificare una restrizione sui valori di corrispondenza per testexpression . Se la parola chiave Is non viene specificata, viene inserita automaticamente prima di comparisonoperator.Il modulo che specifica solo expression viene considerato come un caso speciale del modulo di Is in cui confrontooperatore è il segno di uguale (= ). Questo modulo viene valutato come testexpression = expression .Le espressioni in expressionlist possono essere di qualsiasi tipo di dati, purché siano convertibili in modo implicito nel tipo di testexpression e il comparisonoperator appropriato sia valido per i due tipi con cui viene usato. |
statements |
Facoltativo. Una o più istruzioni Case seguenti che vengono eseguite se testexpression corrispondono a una clausola in expressionlist . |
elsestatements |
Facoltativo. Una o più istruzioni Case Else seguenti che vengono eseguite se testexpression non corrispondono ad alcuna clausola nell'oggetto expressionlist di una delle istruzioni Case . |
End Select |
Termina la definizione della costruzione Select ...Case . |
Osservazioni:
Se testexpression
corrisponde a una clausola expressionlist
Case
, le istruzioni successive all'istruzione Case
vengono eseguite fino alla successiva istruzione Case
, Case Else
o End Select
. Il controllo passa quindi all'istruzione End Select
successiva. Se testexpression
corrisponde a una clausola expressionlist
in più di una clausola Case
, vengono eseguite solo le istruzioni successive alla prima.
L'istruzione Case Else
viene usata per introdurre elsestatements
da eseguire se non viene trovata alcuna corrispondenza tra testexpression
e una clausola expressionlist
in una qualsiasi delle altre istruzioni Case
. Anche se non richiesto, è consigliabile avere un'istruzione Case Else
nella costruzione Select Case
per gestire valori testexpression
imprevisti. Se nessuna clausola expressionlist
Case
corrisponde a testexpression
e non è presente alcuna istruzione Case Else
, il controllo passa all'istruzione successiva a End Select
.
È possibile usare più espressioni o intervalli in ogni clausola Case
. Ad esempio, la riga seguente è valida.
Case 1 To 4, 7 To 9, 11, 13, Is > maxNumber
Nota
La parola chiave Is
usata nelle istruzioni Case
e Case Else
non è la stessa dell’Operatore Is, usata per il confronto dei riferimenti a oggetti.
È possibile specificare intervalli e più espressioni per le stringhe di caratteri. Nell'esempio seguente, Case
corrisponde a qualsiasi stringa esattamente uguale a "mele", ha un valore compreso tra "noci" e "zuppa" in ordine alfabetico, oppure contiene lo stesso valore del valore corrente di testItem
.
Case "apples", "nuts" To "soup", testItem
L'impostazione di Option Compare
può influire sui confronti tra stringhe. In Option Compare Text
, le stringhe "Mele" e "mele" vengono confrontate come uguali, ma in Option Compare Binary
non lo fanno.
Nota
Un'istruzione Case
con più clausole può presentare un comportamento noto come corto circuito. Visual Basic valuta le clausole da sinistra a destra, e se una produce una corrispondenza con testexpression
, le clausole rimanenti non vengono valutate. Il corto circuito può migliorare le prestazioni, ma può produrre risultati imprevisti se si prevede che ogni espressione in expressionlist
venga valutata. Per altre informazioni sul corto circuito, vedere Espressioni booleane.
Se il codice all'interno di un blocco di istruzioni Case
o Case Else
non deve eseguire altre istruzioni nel blocco, può uscire dal blocco usando l'istruzione Exit Select
. Questo trasferisce immediatamente il controllo all'istruzione End Select
seguente.
Le costruzioni Select Case
possono essere annidate. Ogni costruzione Select Case
annidata deve avere un'istruzione End Select
corrispondente e deve essere completamente contenuta all'interno di un singolo blocco di istruzioni Case
o Case Else
della costruzione Select Case
esterna all'interno della quale è annidata.
Esempio
Nell'esempio seguente viene utilizzata una costruzione Select Case
per scrivere una riga corrispondente al valore della variabile number
. La seconda istruzione Case
contiene il valore corrispondente al valore corrente di number
, quindi l'istruzione che scrive "Tra 6 e 8, inclusiva" viene eseguita.
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