当您要针对三个或更多条件测试变量时,可以使用 switch 语句代替 if else 语句。在这里,您将了解switch语句以及如何在C#程序中有效地使用它。
以下是switch语句的一般语法。
语法:
switch(match expression/variable) { case constant-value: //要执行的语句; break; default: //要执行的语句; break; }
switch语句以switch关键字开头,该关键字包含一个匹配表达式或括号switch(匹配表达式 match expression)中的变量。这个匹配表达式或变量的结果将根据在花括号{}内指定的case条件进行测试。case必须用唯一的常量值指定,并以冒号:结束。每种情况包括一个或多个要执行的语句。如果常量值和匹配表达式/变量的值相等,则执行case。switch语句还可以包含一个可选的默认标签。如果没有执行case,则执行 default 标签。break、return或goto关键字用于从 switch 情况中退出程序控制。
以下示例演示了一个简单的switch语句。
int x = 10; switch (x) { case 5: Console.WriteLine("x的值是5"); break; case 10: Console.WriteLine("x的值是10"); break; case 15: Console.WriteLine("x的值是15"); break; default: Console.WriteLine("未知值"); break; }
x的值是10
上面,switch (x)语句包含一个变量 x,其值将与每个 case 值的值匹配。上面的 switch 语句包含常量值5、10和15的三种情况。它还包含 default 标签,如果没有任何 case 值与 switch 变量/表达式 匹配,将执行该标签。每个case在 : 之后开始,并包含一个要执行的语句。X 的值与第二种情况下的值10: 匹配,因此输出值为 x 的值是10。
switch语句可以包含任何返回值类型为char,string,bool,int或enum的非空表达式。
switch语句还可以包含一个表达式,它的结果将在运行时针对每个 case 进行测试。
int x = 125; switch (x % 2) { case 0: Console.WriteLine($"{x} 为偶数"); break; case 1: Console.WriteLine($"{x} 是奇数"); break; }
125是奇数
Switch Case 必须是唯一的常数值。它可以是bool,char,string,integer,enum或相应的可为null的类型。
在c# 7.0之后,switch case可以包含非唯一值。在这种情况下,将执行第一个匹配的case。
考虑以下简单的switch语句示例。
string statementType = "switch"; switch (statementType) { case "if.else": Console.WriteLine("if...else statement"); break; case "ternary": Console.WriteLine("Ternary operator"); break; case "switch": Console.WriteLine("switch statement"); break; }
switch statement
可以组合多个 case 来执行相同的语句。
int x = 5; switch (x) { case 1: Console.WriteLine("x = 1"); break; case 2: Console.WriteLine("x = 2"); break; case 4: case 5: Console.WriteLine("x = 4 or x = 5"); break; default: Console.WriteLine("x > 5"); break; }
每个case必须通过使用break、return、goto语句或其他方式显式地退出case,确保程序控制退出一个case,并且不会进入默认的case。
以下使用 return 关键字。
static void Main(string[] args) { int x = 125; Console.Write( isOdd(x)? "偶数值" : "奇数值"); } static bool isOdd(int i, int j) { switch (x % 2) { case 0: return true; case 1: return false; default: return false; } return false; }
奇数值
没有break、return或goto语句或具有相同常量值的switch case将产生编译时错误。
int x = 1; switch (x) { case 0: Console.WriteLine($"{x} is even value"); break; case 1: Console.WriteLine($"{x} is odd Value"); break; case 1: // 错误-控件无法从一个case标签(“ case 1:”)进入另一个 case 标签 Console.WriteLine($"{x} is odd Value"); defaut: Console.WriteLine($"{x} is odd Value"); break; }
一个switch语句可以在另一个switch语句中使用。
int j = 5; switch (j) { case 5: Console.WriteLine(5); switch (j - 1) { case 4: Console.WriteLine(4); switch (j - 2) { case 3: Console.WriteLine(3); break; } break; } break; case 10: Console.WriteLine(10); break; case 15: Console.WriteLine(15); break; default: Console.WriteLine(100); break; }
5 4 3
switch 语句是 if else 语句的代替方法。
switch 语句根据指定为 case 的一组常量测试匹配表达式/变量。
switch case 必须包含break、return、goto关键字才能退出 case。
switch 可以包含一个可选的 default 标签,当不执行case时将执行该标签。
C#编译器将给出关于case缺少:,常量值的错误,并退出case。
从C#7.0起,switch 条件可以包含非唯一值。在这种情况下,将执行第一个匹配情况。