7.3.2 switch语句
switch语句也可用于对多个条件的判断,但它和if以及else if排列并非完全相同。switch语句是一个控制语句,它通过将控制传递给其体内的一个case语句来处理多个选择,其中case语句只能处理枚举值、常量值和文本值,其语法如下:
switch(表达式){
case常量表达式1:
语句组
break;
case常量表达式1:
语句组
break;
default:
语句组
break;
}
switch语句可以包括任意数目的case实例,但是任何两个case语句都不能具有相同的值。语句体从选定的语句开始执行,直到break将控制传递到case体以外。在每一个case块(包括上一个块,不论它是case语句还是default语句)的后面,都必须有一个跳转语句(如break)。C#不支持从一个case标签显式贯穿到另一个case标签,但有一个例外(这与C++switch语句不同)——当case语句中没有代码时,如代码清单7-4所示。
代码清单7-4 switch语句
1 using System;
2
3 namespace ProgrammingCSharp4
4{
5 public class StatementSample
6{
7 static void Main()
8{
9 int x=30;
10 switch(x)
11{
12 case 10:
13 case 20:
14 Console.WriteLine(“x值等于20!”);
15 break;
16 case 30:
17 Console.WriteLine(“x值等于30!”);
18 break;
19 default:
20 Console.WriteLine(“x值未知!”);
21 break;
22}
23}
24}
25}
运行结果为:
x值等于30!
上述代码中,x表达式的值为30,switch中的case语句测试紧随其后的常数值,当和x值相等时则执行其下的语句组,其中switch语句内的第9行,case为空语句,因此程序直接从第12行的case语句贯穿到第13行;而第13行的case语句值和x值不匹配,因此也不会进入;第16行和x值匹配,因此系统执行其下的语句组,打印出:“x值等于30!”,注意每个case内的语句组都是以break结尾(空语句例外)。
第15、18、21行的break语句也可以换成return。注意,这仅限于在switch语句后没有其他语句的情况下,否则switch后的语句将不会被执行。关于return语句的更多细节请参阅7.4.3节。