Оператор 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 Long Integer Decimal Object ,,SByte,,,,,,, Short Single, ,StringUShort). UInteger ULongMust 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

Используйте ключевое слово, чтобы указать границы диапазона значений соответствия для testexpression. ToUse 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.

< <= <> > >=Используйте ключевое слово с оператором сравнения=(,,,, или), чтобы указать ограничение на значения сопоставления для testexpression. IsUse the Is keyword with a comparison operator (=, <>, <, <=, >, or >=) to specify a restriction on the match values for testexpression. Если ключевое слово не указано, оно автоматически вставляется перед компарисоноператор. IsIf 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. = expressionThis 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... Case создание.Terminates the definition of the Select...Case construction.

ПримечанияRemarks

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

testexpression elsestatements Case expressionlist Оператор используется для представления для запуска, если между предложением и в других инструкциях не найдено совпадений. Case ElseThe 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 End Selectсовпадает и отсутствует оператор, управление передается оператору ниже. Case Else testexpressionIf 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

Примечание

Ключевое слово Case , используемое Case Else в операторах и, не совпадает с оператором is, который используется для сравнения ссылок на объекты. IsThe 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 Binaryно в противном случае — нет. Option Compare TextUnder Option Compare Text, the strings "Apples" and "apples" compare as equal, but under Option Compare Binary, they do not.

Примечание

Оператор с несколькими предложениями может демонстрировать поведение, называемое сокращенным вычислением. CaseA 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