Istruzione Select...Case (Visual Basic)
Consente di eseguire uno dei vari gruppi di istruzioni disponibili in base al valore di un'espressione.
Select [ Case ] testexpression
[ Case expressionlist
[ statements ] ]
[ Case Else
[ elsestatements ] ]
End Select
Parti
Termine |
Definizione |
testexpression |
Obbligatorio.Espressione.È necessario che restituisca un tipo di dati elementare, ovvero Boolean, Byte, Char, Date, Double, Decimal, Integer, Long, Object, SByte, Short, Single, String, UInteger, ULong e UShort. |
expressionlist |
Obbligatoria in un'istruzione Case.Elenco di clausole di espressione che rappresentano i valori delle corrispondenze di testexpression.Le clausole sono separate da una virgola.Ogni clausola può accettare una delle seguenti forme:
La parola chiave To può essere utilizzata per specificare i limiti di un intervallo di valori delle corrispondenze di testexpression.Il valore di expression1 deve essere minore di o uguale al valore di expression2. Utilizzare la parola chiave Is con un operatore di confronto (=, <>, <, <=, > o >=) per specificare una limitazione in relazione ai valori delle corrispondenze di testexpression.Se non viene fornita la parola chiave Is verrà inserita automaticamente prima di comparisonoperator. Se un form specifica solo expression, viene considerato un caso speciale del form Is in cui comparisonoperator è il segno uguale (=)Questo form verrà valutato come testexpression = expression. Per le espressioni di expressionlist può essere utilizzato qualsiasi tipo di dati, a condizione che sia convertibile in modo implicito nel tipo di testexpression e che l'opportuno comparisonoperator sia valido per i due tipi con i quali viene utilizzato. |
statements |
Parametro facoltativo.Una o due istruzioni successive a Case che vengono eseguite se testexpression corrisponde a qualsiasi clausola expressionlist. |
elsestatements |
Parametro facoltativo.Una o più istruzioni successive a Case Else che vengono eseguite se testexpression non corrisponde ad alcuna clausola nell'expressionlist di una qualsiasi istruzione Case. |
End Select |
Consente di terminare la definizione della costruzione Select...Case. |
Note
Se testexpression corrisponde a qualsiasi clausola expressionlist di Case, le istruzioni che seguono l'istruzione Case arrivano fino alla successiva istruzione Case, Case Else o End Select.Il controllo passa quindi all'istruzione che segue End Select.Se il parametro testexpression corrisponde a una clausola expressionlist in più clausole Case, vengono eseguite solo le istruzioni che seguono la prima corrispodenza.
L'istruzione Case Else viene utilizzata per introdurre il parametro elsestatements da eseguire qualora non venga rilevata alcuna corrispondenza fra testexpression e la clausola expressionlist in nessuna delle altre istruzioni Case.Anche se non richiesto, è consigliabile inserire un'istruzione Case Else nella costruzione Select Case per la gestione di valori testexpression non previsti.Se nessuna clausola expressionlist di Case corrisponde a testexpression e non esiste un'istruzione Case Else, il controllo passa all'istruzione che segue End Select.
In ciascuna clausola Case è possibile utilizzare più espressioni o intervalli.La riga seguente, ad esempio, è valida:
Case 1 To 4, 7 To 9, 11, 13, Is > maxNumber
[!NOTA]
La parola chiave Is utilizzata nelle istruzioni Case e Case Else non è uguale a Operatore Is (Visual Basic), che viene utilizzata per il confronto per riferimenti a oggetti.
È possibile specificare intervalli ed espressioni multiple per le stringhe di caratteri.Nell'esempio riportato di seguito, Case è corrispondente a qualsiasi stringa che è identica a "apples", ha un valore compreso fra "nuts" e "soup" in ordine alfabetico oppure contiene un valore identico al valore corrente di testItem.
Case "apples", "nuts" To "soup", testItem
L'impostazione di Option Compare può influire sul confronto tra stringhe.Per Option Compare Text, le stringhe "Apples" e "apples" appaiono identiche al confronto, ma non se si utilizza Option Compare Binary.
[!NOTA]
Un'istruzione Case con molteplici clausole può presentare un tipo di comportamento noto come short circuit.In Visual Basic le clausole vengono valutate da sinistra a destra e se una di esse genera una corrispondenza con testexpression, le restanti clausole non vengono valutate.Lo short-circuit può migliorare le prestazioni, ma può generare risultati imprevisti se ci si aspetta che venga valutata ogni espressione inclusa in expressionlist.Per ulteriori informazioni sul short-cirtuit, vedere Espressioni booleane (Visual Basic).
Se il codice in un blocco di istruzioni Case o Case Else non deve più eseguire alcuna istruzione del blocco, può abbandonare il blocco utilizzando l'istruzione Exit Select.Il controllo viene trasferito immediatamente all'istruzione che segue End Select.
Le costruzioni Select Case possono essere annidate.Ogni costruzione Select Case annidata deve avere un'istruzione End Select corrispondente e deve essere completamente contenuta in un singolo blocco di istruzioni Case o Case Else della costruzione esterna Select Case in cui è annidata.
Esempio
In questo esempio la costruzione Select Case viene utilizzata per scrivere una riga che corrisponde al valore della variabile number.La seconda istruzione Case contiene il valore che corrisponde al valore corrente di number, in modo che venga eseguita l'istruzione che scrive "Between 6 and 8, inclusive".
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