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 的匹配值的表达式子句列表。 多个表达式子句用逗号分隔。 各子句可以采用以下形式之一:- expression1 To expression2- [ Is ] comparisonoperator expression- 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 与任何 Case 语句的 expressionlist 中的任何子句都不匹配时运行。 |
End Select |
终止 Select ...Case 构造的定义。 |
注解
如果 testexpression
与任何 Case
expressionlist
子句匹配,该 Case
语句后面的语句将运行到下一个 Case
、Case Else
或 End Select
语句。 然后,控制权传递给 End Select
后面的语句。 如果 testexpression
与多个 Case
子句中的 expressionlist
子句匹配,则仅运行第一个匹配项后面的语句。
如果在 testexpression
和任何其他 Case
语句中的 expressionlist
子句之间找不到匹配项,则使用 Case Else
语句引入要运行的 elsestatements
。 尽管不是必需的,但最好在 Select Case
构造中使用 Case Else
语句来处理不可预见的 testexpression
值。 如果 Case
expressionlist
子句与 testexpression
不匹配,并且没有 Case Else
语句,则控制权传递给 End Select
后面的语句。
可以在每个 Case
子句中使用多个表达式或范围。 例如,以下行是有效的。
Case 1 To 4, 7 To 9, 11, 13, Is > maxNumber
注意
Case
和 Case Else
语句中使用的 Is
关键字与用于对象引用比较的 Is 运算符不同。
可以为字符串指定范围和多个表达式。 在以下示例中,Case
匹配符合以下条件的字符串:与“apples”完全相等,其值介于“nuts”和“soup”之间(按字母顺序),或包含与 testItem
的当前值完全相同的值。
Case "apples", "nuts" To "soup", testItem
Option Compare
的设置会影响字符串比较。 在 Option Compare Text
下,字符串“Apples”和“apples”比较为相等,但在 Option Compare Binary
下,它们不相等。
注意
包含多个子句的 Case
语句可能会表现出称为短路的行为。 Visual Basic 从左到右计算子句,如果一个子句与 testexpression
匹配,则不计算其余子句。 短路可以提高性能,但如果希望计算 expressionlist
中的每个表达式,它可能会产生意想不到的结果。 有关短路的详细信息,请参阅布尔表达式。
如果 Case
或 Case Else
语句块中的代码不再需要运行块中的任何语句,则可以使用 Exit Select
语句退出该块。 这会立即将控制权传递给 End Select
后面的语句。
Select Case
构造可以嵌套。 每个嵌套的 Select Case
构造必须具有匹配的 End Select
语句,并且必须完全包含在嵌套它的外部 Select Case
构造的单个 Case
或 Case Else
语句块中。
示例
以下示例使用 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