Istruzione Select...Case (Visual Basic)Select...Case Statement (Visual Basic)

Esegue uno dei diversi gruppi di istruzioni, a seconda del valore di un'espressione.Runs one of several groups of statements, depending on the value of an expression.

SintassiSyntax

Select [ Case ] testexpression  
    [ Case expressionlist  
        [ statements ] ]  
    [ Case Else  
        [ elsestatements ] ]  
End Select  

PartiParts

TermineTerm DefinizioneDefinition
testexpression Obbligatorio.Required. Espressione.Expression. 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 ).Must evaluate to one of the elementary data types (Boolean, Byte, Char, Date, Double, Decimal, Integer, Long, Object, SByte, Short, Single, String, UInteger, ULong, and UShort).
expressionlist Obbligatorio in un' Case istruzione.Required in a Case statement. Elenco di clausole di espressione che rappresentano i valori delle corrispondenze per testexpression .List of expression clauses representing match values for testexpression. Più clausole Expression sono separate da virgole.Multiple expression clauses are separated by commas. Ogni clausola può assumere uno dei seguenti formati:Each clause can take one of the following forms:

- expression1 To expression2- expression1 To expression2
-[ Is ] comparisonoperator espressione comparisonoperator- [ Is ] comparisonoperator expression
- espressione- expression

Usare la To parola chiave per specificare i limiti di un intervallo di valori di corrispondenza per testexpression .Use the To keyword to specify the boundaries of a range of match values for testexpression. Il valore di expression1 deve essere minore o uguale al valore di expression2 .The value of expression1 must be less than or equal to the value of expression2.

Usare la Is parola chiave con un operatore di confronto ( = , <> , < , <= , > o >= ) per specificare una restrizione sui valori di corrispondenza per testexpression .Use the Is keyword with a comparison operator (=, <>, <, <=, >, or >=) to specify a restriction on the match values for testexpression. Se la Is parola chiave non viene specificata, viene inserita automaticamente prima di comparisonoperator.If the Is keyword is not supplied, it is automatically inserted before comparisonoperator.

Il form che specifica solo expression viene considerato come un caso speciale nel Is formato in cui comparisonoperator è il segno di uguale ( = ).The form specifying only expression is treated as a special case of the Is form where comparisonoperator is the equal sign (=). Questo form viene valutato come testexpression = expression .This form is evaluated as testexpression = expression.

Le espressioni in expressionlist possono essere di qualsiasi tipo di dati, purché siano convertibili in modo implicito nel tipo di testexpression e l'oggetto appropriato comparisonoperator è valido per i due tipi con cui viene usato.The expressions in expressionlist can be of any data type, provided they are implicitly convertible to the type of testexpression and the appropriate comparisonoperator is valid for the two types it is being used with.
statements facoltativo.Optional. Una o più istruzioni Case che seguono l'esecuzione se testexpression corrisponde a qualsiasi clausola in expressionlist .One or more statements following Case that run if testexpression matches any clause in expressionlist.
elsestatements facoltativo.Optional. Una o più istruzioni che seguono l' Case Else esecuzione se testexpression non corrisponde ad alcuna clausola in expressionlist di una delle Case istruzioni.One or more statements following Case Else that run if testexpression does not match any clause in the expressionlist of any of the Case statements.
End Select Termina la definizione della Select costruzione... Case .Terminates the definition of the Select...Case construction.

CommentiRemarks

Se testexpression corrisponde Case expressionlist a qualsiasi clausola, le istruzioni che seguono tale Case istruzione vengono eseguite fino alla successiva Case Case Else istruzione, o End Select .If testexpression matches any Case expressionlist clause, the statements following that Case statement run up to the next Case, Case Else, or End Select statement. Il controllo passa quindi all'istruzione che segue End Select .Control then passes to the statement following End Select. Se testexpression corrisponde expressionlist a una clausola in più di una Case clausola, vengono eseguite solo le istruzioni che seguono la prima corrispondenza.If testexpression matches an expressionlist clause in more than one Case clause, only the statements following the first match run.

L' Case Else istruzione viene utilizzata per introdurre l'oggetto elsestatements da eseguire se non viene trovata alcuna corrispondenza tra testexpression e una expressionlist clausola in nessuna delle altre Case istruzioni.The Case Else statement is used to introduce the elsestatements to run if no match is found between the testexpression and an expressionlist clause in any of the other Case statements. Sebbene non sia obbligatorio, è consigliabile avere un' Case Else istruzione nella Select Case costruzione per gestire testexpression i valori imprevisti.Although not required, it is a good idea to have a Case Else statement in your Select Case construction to handle unforeseen testexpression values. Se nessuna Case expressionlist clausola corrisponde testexpression e non è presente alcuna Case Else istruzione, il controllo passa all'istruzione che segue End Select .If no Case expressionlist clause matches testexpression and there is no Case Else statement, control passes to the statement following End Select.

È possibile utilizzare più espressioni o intervalli in ogni Case clausola.You can use multiple expressions or ranges in each Case clause. La riga seguente, ad esempio, è valida.For example, the following line is valid.

Case 1 To 4, 7 To 9, 11, 13, Is > maxNumber

Nota

La Is parola chiave usata nelle Case Case Else istruzioni e non è uguale all' operatore is, che viene usato per il confronto dei riferimenti agli oggetti.The Is keyword used in the Case and Case Else statements is not the same as the Is Operator, which is used for object reference comparison.

È possibile specificare intervalli e più espressioni per le stringhe di caratteri.You can specify ranges and multiple expressions for character strings. Nell'esempio seguente, Case trova la corrispondenza con qualsiasi stringa esattamente uguale a "mele", ha un valore compreso tra "Nuts" e "soup" in ordine alfabetico o contiene lo stesso valore del valore corrente di testItem .In the following example, Case matches any string that is exactly equal to "apples", has a value between "nuts" and "soup" in alphabetical order, or contains the exact same value as the current value of testItem.

Case "apples", "nuts" To "soup", testItem

L'impostazione di Option Compare può influire sui confronti tra stringhe.The setting of Option Compare can affect string comparisons. In Option Compare Text le stringhe "mele" e "mele" si confrontano come uguali, ma in non lo Option Compare Binary sono.Under Option Compare Text, the strings "Apples" and "apples" compare as equal, but under Option Compare Binary, they do not.

Nota

Un' Case istruzione con più clausole può presentare il comportamento noto come corto circuito.A Case statement with multiple clauses can exhibit behavior known as short-circuiting. Visual Basic valuta le clausole da sinistra a destra e se una corrisponde a testexpression , le clausole rimanenti non vengono valutate.Visual Basic evaluates the clauses from left to right, and if one produces a match with testexpression, the remaining clauses are not evaluated. Il cortocircuito può migliorare le prestazioni, ma può produrre risultati imprevisti se si prevede che ogni espressione in expressionlist venga valutata.Short-circuiting can improve performance, but it can produce unexpected results if you are expecting every expression in expressionlist to be evaluated. Per ulteriori informazioni sul corto circuito, vedere espressioni booleane.For more information on short-circuiting, see Boolean Expressions.

Se il codice all'interno di un Case Case Else blocco di istruzioni o non richiede l'esecuzione di altre istruzioni nel blocco, può uscire dal blocco utilizzando l' Exit Select istruzione.If the code within a Case or Case Else statement block does not need to run any more of the statements in the block, it can exit the block by using the Exit Select statement. Questa operazione trasferisce immediatamente il controllo all'istruzione seguente End Select .This transfers control immediately to the statement following End Select.

Select Case le costruzioni possono essere nidificate.Select Case constructions can be nested. Ogni costruzione annidata Select Case deve avere un' End Select istruzione corrispondente e deve essere completamente contenuta all'interno di un singolo Case Case Else blocco di istruzioni o della Select Case costruzione esterna in cui è annidato.Each nested Select Case construction must have a matching End Select statement and must be completely contained within a single Case or Case Else statement block of the outer Select Case construction within which it is nested.

EsempioExample

Nell'esempio seguente viene utilizzata una Select Case costruzione per scrivere una riga corrispondente al valore della variabile number .The following example uses a Select Case construction to write a line corresponding to the value of the variable number. La seconda Case istruzione contiene il valore che corrisponde al valore corrente di number , quindi viene eseguita l'istruzione che scrive "between 6 and 8 Inclusive".The second Case statement contains the value that matches the current value of number, so the statement that writes "Between 6 and 8, inclusive" runs.

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

Vedere ancheSee also