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节。