Instrução Select...Case (Visual Basic)
Executa um dos vários grupos de instruções, dependendo do valor de uma expressão.
Sintaxe
Select [ Case ] testexpression
[ Case expressionlist
[ statements ] ]
[ Case Else
[ elsestatements ] ]
End Select
Partes
Termo | Definição |
---|---|
testexpression |
Obrigatórios. Expressão. Deve ser avaliada como um dos tipos de dados elementares (Boolean , Byte , Char , Date , Double , Decimal , Integer , Long , Object , SByte , Short , Single , String , UInteger , ULong , e UShort ). |
expressionlist |
Obrigatória em uma instrução Case . Lista de cláusulas de expressão que representam valores de correspondência para testexpression . Várias cláusulas de expressão são separadas por vírgulas. Cada cláusula pode ter uma das seguintes formas:- expression1 To expression2- [ Is ] comparisonoperator expression- expressão Use a palavra-chave To para especificar os limites de um intervalo de valores de correspondência para testexpression . O valor de expression1 deve ser menor ou igual ao valor de expression2 .Use a palavra-chave Is com um operador de comparação (= ,<> , < , <= , > ou >= ) para especificar uma restrição nos valores de correspondência para testexpression . Se a palavra-chave Is não for fornecida, ela será inserida automaticamente antes do comparisonoperator.A forma que especifica somente expression é tratado como um caso especial da forma Is em que o comparisonoperator é o sinal de igual (= ). Essa forma é avaliada como testexpression = expression .As expressões em expressionlist podem ser de qualquer tipo de dados, desde que sejam implicitamente conversíveis para o tipo testexpression e o comparisonoperator apropriado seja válido para os dois tipos com os quais está sendo usado. |
statements |
Opcional. Uma ou mais instruções após Case que são executadas se testexpression corresponder a qualquer cláusula em expressionlist . |
elsestatements |
Opcional. Uma ou mais instruções a seguir Case Else que são executadas se testexpression não corresponderem a nenhuma cláusula expressionlist em nenhuma das instruções Case . |
End Select |
Termina a definição do constructo Select ...Case . |
Comentários
Se testexpression
corresponder a qualquer cláusula Case
expressionlist
, as instruções após essa instrução Case
serão executadas até a próxima instrução Case
, Case Else
ou End Select
. Em seguida, o controle passa para a instrução após End Select
. Se testexpression
corresponder a uma cláusula expressionlist
em mais de uma cláusula Case
, somente as instruções após a primeira correspondência serão executadas.
A instrução Case Else
é usada para introduzir elsestatements
para execução se nenhuma correspondência for encontrada entre testexpression
e uma cláusula expressionlist
em qualquer uma das outras instruções Case
. Embora não seja necessário, é uma boa ideia ter uma instrução Case Else
em seu constructo Select Case
para lidar com valores imprevistos de testexpression
. Se nenhuma cláusula Case
expressionlist
corresponder a testexpression
e não houver nenhuma instrução Case Else
, o controle passará para a instrução após End Select
.
Você pode usar várias expressões ou intervalos em cada cláusula Case
. Por exemplo, a linha a seguir é válida.
Case 1 To 4, 7 To 9, 11, 13, Is > maxNumber
Observação
A palavra-chave Is
usada nas instruções Case
e Case Else
não é a mesma que o Operador Is, usado para comparação de referência de objeto.
Você pode especificar intervalos e várias expressões para cadeias de caracteres. No exemplo a seguir, Case
corresponde a qualquer cadeia de caracteres exatamente igual a "maçãs", tem um valor entre "nozes" e "sopa" em ordem alfabética ou contém exatamente o mesmo valor do valor atual de testItem
.
Case "apples", "nuts" To "soup", testItem
A configuração de Option Compare
pode afetar comparações de cadeia de caracteres. Em Option Compare Text
, as cadeias de caracteres "Maçãs" e "maçãs" se comparam como iguais, o que não é o caso em Option Compare Binary
.
Observação
Uma instrução Case
com várias cláusulas pode exibir o comportamento conhecido como curto-circuito. O Visual Basic avalia as cláusulas da esquerda para a direita e, se uma delas produzir uma correspondência com testexpression
, as cláusulas restantes não serão avaliadas. O curto-circuito pode melhorar o desempenho, mas pode produzir resultados inesperados se você espera que cada expressão expressionlist
seja avaliada. Para obter mais informações sobre curto-circuito, consulte Expressões boolianas.
Se o código dentro de um bloco de instruções Case
ou Case Else
não precisar executar mais instruções no bloco, ele poderá sair do bloco usando a instrução Exit Select
. Isso transfere o controle imediatamente para a instrução após End Select
.
Construções Select Case
podem ser aninhadas. Cada construção Select Case
aninhada deve ter uma instrução correspondente End Select
e deve estar completamente contida em um único bloco Case
ou instrução Case Else
da construção externa Select Case
na qual está aninhada.
Exemplo
O exemplo a seguir usa uma construção Select Case
para gravar uma linha correspondente ao valor da variável number
. A segunda instrução Case
contém o valor que corresponde ao valor atual de number
, portanto, a instrução que grava "Entre 6 e 8, inclusive" é executada.
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