Show/Hide Toolbars

XSharp

用途

有条件地执行语句块

语法

SWITCH <expression>
CASE <constantvalue> [WHEN <whenexpression>]
  <Statements>...
[CASE <constantvalue>]
[CASE <constantvalue>]
  <Statements>...
[CASE <constantvalue>]
  <Statements>...
[CASE <variablename> AS <datatype>] [WHEN <whenexpression>]
  <Statements>...
[OTHERWISE]
  <Statements>...
END [SWITCH]

参数

<constantvalue>可在编译时评估的常量值。也可以有 2 行连续的 CASE 行,但行与行之间没有语句。在这种情况下,两个 CASE 行共享同一个语句块。如果想要一个不带语句的 case 块,则插入一条 NOP 语句作为其语句。

 

<whenexpression>逻辑表达式,用于确定特定 CASE 块是否应处于活动状态。

 

<variablename>通过模式匹配表达式声明的变量名

 

<datatype>模式匹配表达式中变量的数据类型

 

OTHERWISE如果前面的 CASE 条件都不匹配,则执行 OTHERWISE 之后直到下一个 END SWITCH 之前的语句。之后,控制权分支到下一条END SWITCH 语句之后的语句。

描述

SWITCH 的工作方式是分支到第一个求值为 TRUE 的 CASE <constantvalue> 之后的语句。如果所有 CASE 条件的结果都是 FALSE,它就会分支到 OTHERWISE 语句(如果指定)后面的语句。

一般来说,SWITCH 语句有两种类型:

1.带常量值的开关语句(CASE <constantvalue>)

2.使用模式匹配表达式的交换语句(CASE <varName> AS <datatype>)

这两种类型的 SWITCH 语句都可以通过 WHEN 过滤器来增强。

如果没有 WHEN 过滤器,则每个 CASE 行必须是 "唯一 "的,因此没有两个 CASE 可以具有相同的常量值或相同的数据类型。如果添加了 WHEN 过滤器,就可以做到这一点。

编译器在生成代码时可能(也会)重新排列 CASE 标签的顺序,例如将两个具有相同常量值和 WHEN 过滤器的 CASE 合并。这些标签可以合并为一个带有嵌入式 IF 语句的 CASE 标签。

 

执行一直进行到遇到下一个 CASE、OTHERWISE 或 END SWITCH,然后控制分支到下一个 ENDCASE 语句后的第一个语句。

控制结构可以嵌套到任何深度。唯一的要求是每个控制结构都必须正确嵌套。

 

示例

本示例在菜单结构中使用 SWITCH,根据用户的选择进行控制分支:

FUNCTION ActonChoice(nChoice as LONG) AS VOID
SWITCH nChoice
CASE  0
  RETURN
CASE 1
  ChoiceOne()
CASE 2
  ChoiceTwo()
END SWITCH

参见

BEGIN SEQUENCE, DO WHILE, FOR, FOREACH IF DO CASE