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

Выполняет одну из нескольких групп инструкций в зависимости от значения выражения.Runs one of several groups of statements, depending on the value of an expression.

СинтаксисSyntax

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

КомпонентыParts

ТерминTerm ОпределениеDefinition
testexpression Обязательный.Required. Выражение.Expression. Необходимо вычислить до одного из простейших типов данных (,,,,,,,,,,,,,, Boolean Byte Char Date Double Decimal Integer Long Object SByte Short Single String UInteger ULong и 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 Требуется в Case операторе.Required in a Case statement. Список предложений выражений, представляющих значения соответствия для testexpression .List of expression clauses representing match values for testexpression. Несколько предложений выражений разделяются запятыми.Multiple expression clauses are separated by commas. Каждое предложение может принимать одну из следующих форм:Each clause can take one of the following forms:

- expression1 To выражение2- expression1 To expression2
-[ Is ] компарисоноператор выражение- [ Is ] comparisonoperator expression
- выражение- expression

Используйте To ключевое слово, чтобы указать границы диапазона значений соответствия для testexpression .Use the To keyword to specify the boundaries of a range of match values for testexpression. Значение expression1 должно быть меньше или равно значению expression2 .The value of expression1 must be less than or equal to the value of expression2.

Используйте Is ключевое слово с оператором сравнения ( = , <> ,,, < <= > или >= ), чтобы указать ограничение на значения сопоставления для testexpression .Use the Is keyword with a comparison operator (=, <>, <, <=, >, or >=) to specify a restriction on the match values for testexpression. Если Is ключевое слово не указано, оно автоматически вставляется перед компарисоноператор.If the Is keyword is not supplied, it is automatically inserted before comparisonoperator.

Форма, указывающая только expression , рассматривается как особый случай формы, Is где компарисоноператор — знак равенства ( = ).The form specifying only expression is treated as a special case of the Is form where comparisonoperator is the equal sign (=). Эта форма вычисляется как testexpression = expression .This form is evaluated as testexpression = expression.

Выражения в expressionlist могут быть любого типа данных при условии, что они неявно преобразуются в тип, testexpression а подходящее значение comparisonoperator допустимо для двух типов, с которыми он используется.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 Необязательный элемент.Optional. Одна или несколько следующих инструкций Case , которые выполняются, если testexpression совпадают с любым предложением в expressionlist .One or more statements following Case that run if testexpression matches any clause in expressionlist.
elsestatements Необязательный элемент.Optional. Одна или несколько следующих инструкций Case Else , которые выполняются, если не testexpression соответствуют ни одному из предложений в expressionlist ни одной из Case инструкций.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 Завершает определение Select конструкции.... CaseTerminates the definition of the Select...Case construction.

RemarksRemarks

Если testexpression соответствует любому Case expressionlist предложению, инструкции, следующие за этим Case оператором, выполняются до следующей Case Case Else инструкции, или 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. Затем управление передается следующему оператору End Select .Control then passes to the statement following End Select. Если testexpression соответствует expressionlist предложению в более чем одном Case предложении, выполняются только инструкции, следующие за первым совпадением.If testexpression matches an expressionlist clause in more than one Case clause, only the statements following the first match run.

Case ElseОператор используется для представления elsestatements для запуска, если между testexpression expressionlist предложением и в других инструкциях не найдено совпадений Case .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. Хотя это и не является обязательным, рекомендуется иметь Case Else в конструкции оператор, Select Case обрабатывающий непредвиденные testexpression значения.Although not required, it is a good idea to have a Case Else statement in your Select Case construction to handle unforeseen testexpression values. Если Case expressionlist предложение не совпадает testexpression и отсутствует Case Else оператор, управление передается оператору ниже End Select .If no Case expressionlist clause matches testexpression and there is no Case Else statement, control passes to the statement following End Select.

В каждом предложении можно использовать несколько выражений или диапазонов Case .You can use multiple expressions or ranges in each Case clause. Например, следующая строка допустима.For example, the following line is valid.

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

Примечание

IsКлючевое слово, используемое в Case Case Else операторах и, не совпадает с оператором is, который используется для сравнения ссылок на объекты.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.

Можно указать диапазоны и несколько выражений для символьных строк.You can specify ranges and multiple expressions for character strings. В следующем примере Case соответствует любой строке, которая равна «яблоки», имеет значение между «гайкями» и «полный курс» в алфавитном порядке или содержит точно то же значение, что и текущее значение 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

Параметр Option Compare может влиять на сравнения строк.The setting of Option Compare can affect string comparisons. В Option Compare Text строках «яблоки» и «яблоки» сравниваются как одинаковые, но в противном случае — Option Compare Binary нет.Under Option Compare Text, the strings "Apples" and "apples" compare as equal, but under Option Compare Binary, they do not.

Примечание

CaseОператор с несколькими предложениями может демонстрировать поведение, называемое сокращенным вычислением.A Case statement with multiple clauses can exhibit behavior known as short-circuiting. Visual Basic вычисляет предложения слева направо, и если одно из них создает совпадение с testexpression , оставшиеся предложения не оцениваются.Visual Basic evaluates the clauses from left to right, and if one produces a match with testexpression, the remaining clauses are not evaluated. Сокращенное вычисление может повысить производительность, но может привести к непредвиденным результатам, если ожидается вычисление каждого выражения в expressionlist .Short-circuiting can improve performance, but it can produce unexpected results if you are expecting every expression in expressionlist to be evaluated. Дополнительные сведения об сокращенном вычислении см. в разделе логические выражения.For more information on short-circuiting, see Boolean Expressions.

Если код в Case Case Else блоке инструкций или не требует выполнения каких-либо инструкций в блоке, он может выйти из блока с помощью Exit Select инструкции.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. Это немедленно передает управление оператору, приведенному ниже End Select .This transfers control immediately to the statement following End Select.

Select Case конструкции могут быть вложенными.Select Case constructions can be nested. Каждая вложенная Select Case конструкция должна иметь соответствующий End Select оператор и должна быть полностью заключена в один Case Case Else блок инструкций или внешней конструкции, Select Case внутри которой он вложен.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.

ПримерExample

В следующем примере конструкция используется Select Case для записи строки, соответствующей значению переменной number .The following example uses a Select Case construction to write a line corresponding to the value of the variable number. Вторая Case инструкция содержит значение, совпадающее с текущим значением number , поэтому инструкция, записывающая "между 6 и 8 включительно", выполняется.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

См. такжеSee also