http://bianceng.cn
另外,一般来说每个switch项都以break,goto case或goto default结束,但实际上任何一种不导致“遍历”的结构都是允许的,例如throw和return语句同样可以跳出控制之外,因而下例是正确的:
switch(i){
case 0:
while(true) F();
case 1:
throw new ArgumentException();
case 2:
return;
}
把字符串当成常量表达式
VB程序员可能已经习惯把字符串当成常量表达式来使用,但C和C 却不支持这一点。但是,C#的switch语句与c,c 的另一个不同点是,C#可以把字符串当成常量表达式来使用。所以switch语句的控制类型可以是string类型。
下面的例子是实现浮动窗口提示。在Windows操作系统中,我们把鼠标移到某一个控件上停留几秒钟,将会出现一个浮动提示,说明该控件的作用等。例子中的GetButtonCaption方法用于获得按钮上的文字,ShowMessage表示在浮动提示窗口中显示信息。
string text=GetButtonCaption();
switch(text)
{
case "OK":ShowMessage("save the change and exit");break;
case "Retry":ShowMessage("return and retry");break;
case "Abort":ShowMessage("Abort the change and exit");break;
case "Help":ShowMessage("Get help from system");break;
}
实际上,在老版本的C语言中,switch语句的控制类型只允许是整数表达式或字符型表达式,而ANSI标准放宽了这一要求。C#中是对switch语句的控制类型的又一扩展。而且在C#中case标签的引用值允许是nul
注:
控制传递给与开关的值匹配的 case 语句。switch 语句可以包括任意数目的 case 实例,但是任何两个 case 语句都不能具有相同的值。语句体从选定的语句开始执行,直到 break 将控制传递到 case 体以外。在每一个 case 块(包括上一个块,不论它是 case 语句还是 default 语句)的后面,都必须有一个跳转语句(如 break)。但有一个例外,(与 C switch 语句不同)C# 不支持从一个 case 标签显式贯穿到另一个 case 标签。这个例外是当 case 语句中没有代码时。