Оператор Select...Case (Visual Basic)
Выполняет один из блоков операторов в зависимости от значения выражения.
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.Несколько выражений разделяются запятыми.Каждое условие может принимать следующие формы:
Используйте зарезервированное слово 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
Примечание |
---|
Ключевое слово 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 — нет.
Примечание |
---|
Оператор Case с несколькими предложениями может демонстрировать поведение, называемое short-circuiting.Visual Basic вычисляет предложения слева направо, и если одно из них совпадает с testexpression, то оставшиеся предложения не обрабатываются.Укорачивание может повысить производительность, однако оно может привести к непредсказуемым результатам, если ожидалось, что оцениваться будет каждое выражение в expressionlist.Дополнительные сведения об укорачивании содержатся в разделе Логические выражения (Visual Basic). |
Если код в пределах блока операторов 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