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:

- expression1Toexpression2
- [ Is ] comparisonoperatorexpression
- 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 Caseexpressionlist, le istruzioni che seguono l’istruzione Case vengono eseguite fino all'istruzione Case, Case Else o End Select successiva. 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 Caseexpressionlist corrisponde a testexpression e non è presente alcuna istruzione Case Else, il controllo passa all'istruzione End Select seguente.

È 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

Vedi anche