Оператор Select...Case (Visual Basic)

Обновлен: Ноябрь 2007

Выполняет один из блоков операторов в зависимости от значения выражения.

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

Компоненты

  • testexpression
    Обязательный параметр. Выражение. Должен быть равен одному их простых типов данных (Boolean, Byte, Char, Date, Double, Decimal, Integer, Long, Object, SByte, Short, Single, String, UInteger, ULong и UShort).

  • expressionlist
    Обязателен в операторе Case. Список возможных значений для testexpression. Несколько выражений разделяются запятыми. Каждое условие может принимать следующие формы:

    • expression1 To expression2

    • Is ] comparisonoperator expression

    • выражение

    Используйте зарезервированное слово To, чтобы указать диапазон значений для testexpression. Значение expression1 должно быть меньше или равно значению expression2.

    Используйте зарезервированное слово Is с оператором сравнения (=, <>, <, <=, > или >=) для ограничения возможных значений testexpression. Если зарезервированное слово Is отсутствует, оно автоматически вставляется перед comparisonoperator.

    Вид, в котором предоставляется только expression, рассматривается как особый случай использования Is, где comparisonoperator — знак равенства (=). Данная форма вычисляется как testexpression = expression.

    Выражения в expressionlist могут иметь любой тип данных, если они неявно преобразуемы в тип данных, к которому относится testexpression и соответствующий элемент comparisonoperator подходит для двух используемых с ним типов данных.

  • statements
    Необязательно. Один или несколько операторов, следующих за Case, которые запускаются, если testexpression соответствует любому предложению в expressionlist.

  • elsestatements
    Необязательно. Один или несколько операторов, следующих за Case Else, которые выполняются, если testexpression не соответствует ни одному из предложений в expressionlist всех операторов Case.

  • End Select
    Завершает определение конструкции Select...Case.

Заметки

Если testexpression соответствует любому Case предложения expressionlist, операторы, следующие за инструкцией Case переводят к следующему оператору Case, Case Else или End Select. Затем управление передается оператору, следующему за оператором End Select. Если testexpression соответствует предложению expressionlist более чем в одном условии Case, выполнятся только операторы, следующие за первым сопоставлением.

Оператор Case Else используется для выполнения elsestatements, если не найдено ни одного соответствия между testexpression и expressionlist в любом из других операторов Case. Рекомендуется (хотя это не обязательно) иметь оператор Case Else в конструкции Select Case для обработки непредвиденных значений testexpression. Если отсутствует оператор Case, для которого предложение expressionlist сопоставляется testexpression и отсутствует Case Else, то управление будет передано следующему оператору End Select.

В каждом предложении Case можно использовать несколько выражений и диапазонов. Например, допустима следующая строка:

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

cy37t14y.alert_note(ru-ru,VS.90).gifПримечание.

Ключевое слово Is, используемое в операторах Case и Case Else отличается от Оператор Is (Visual Basic), который используется для сравнения ссылок объекта.

Можно указывать диапазоны и несколько выражений для строк. В следующем примере Case пропускает любую строку, которая равна "apples", имеет значение между "nuts" и "soup" в алфавитном порядке или содержит точно такие же значения, как текущее значение testItem.

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

Параметр Option Compare может повлиять на сравнение. В Option Compare Text строки "Apples" и "apples" при сравнении воспринимаются как одинаковые, а при Option Compare Binary — нет.

cy37t14y.alert_note(ru-ru,VS.90).gifПримечание.

Оператор Case с несколькими предложениями может демонстрировать поведение, называемое short-circuiting. Visual Basic вычисляет предложения слева направо, и если одно из них совпадает с testexpression, то оставшиеся предложения не обрабатываются. Укорачивание может повысить производительность, однако оно может привести к непредсказуемым результатам, если ожидалось, что оцениваться будет каждое выражение в expressionlist. Дополнительные сведения об укорачивании содержатся в разделе Логические выражения.

Если код в пределах блока операторов Case или Case Else не требует выполнения любых дополнительных операторов в блоке, можно выйти из блока с помощью оператора Exit Select. Это позволяет немедленно передать управление оператору, следующему за оператором End Select.

Конструкции Select Case могут быть вложенными. Каждая вложенная конструкция Select Case должна иметь соответствующий оператор End Select и должна целиком содержаться внутри одного оператора Case или Case Else внешнего блока конструкции Select Case в которой она является вложенной.

Пример

В следующем примере используется оператор Select Case для записи строки, соответствующей значению переменной number. Второй оператор Case содержит значение, соответствующее текущему значению number, поэтому выполняется оператор, выводящий строку "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

См. также

Ссылки

Функция Choose

Оператор End

Оператор If...Then...Else (Visual Basic)

Оператор Option Compare

Оператор Exit (Visual Basic)