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:

- expressão1Toexpressão2
- [ Is ] operadordecomparaçãoexpressão
- 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 Caseexpressionlist, 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 Caseexpressionlist 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

Confira também