Switch 语句可以用来替换 C# 中的 if...else if 语句。与 if...else if 语句相比,使用 switch 的优点是代码看起来更简洁,可读性更强。
switch 语句的语法是
switch (variable/expression) { case value1: // Statements executed if expression(or variable) = value1 break; case value2: // Statements executed if expression(or variable) = value1 break; ... ... ... ... ... ... default: // Statements executed if no case matches }
switch 语句对 expression(或 variable)进行求值,并将其值与每个 case 的值(或表达式)(value1、value2、……)进行比较。当找到匹配值时,将执行该 case 下的语句。
但是,如果以上所有 case 都不匹配表达式,则将执行 default
块中的语句。switch 末尾的 default 语句类似于 if else 语句中的 else 块。
然而,switch 语句存在一个问题,当找到匹配值时,它会执行之后的所有语句,直到 switch 块的末尾。
为了避免这种情况,我们在每个 case 的末尾使用 break
语句。break 语句通过终止 switch 语句的执行,阻止程序执行非匹配的语句。
要了解有关 break 语句的更多信息,请访问C# break 语句。
示例 1:C# switch 语句
using System;
namespace Conditional
{
class SwitchCase
{
public static void Main(string[] args)
{
char ch;
Console.WriteLine("Enter an alphabet");
ch = Convert.ToChar(Console.ReadLine());
switch(Char.ToLower(ch))
{
case 'a':
Console.WriteLine("Vowel");
break;
case 'e':
Console.WriteLine("Vowel");
break;
case 'i':
Console.WriteLine("Vowel");
break;
case 'o':
Console.WriteLine("Vowel");
break;
case 'u':
Console.WriteLine("Vowel");
break;
default:
Console.WriteLine("Not a vowel");
break;
}
}
}
}
当我们运行程序时,输出将是:
Enter an alphabet X Not a vowel
在此示例中,系统会提示用户输入一个字母。如果字母是大写,则使用 ToLower()
方法将其转换为小写。
然后,switch 语句检查用户输入的字母是否为 a、e、i、o 或 u
中的任何一个。
如果其中一个 case 匹配,则打印 Vowel
,否则控制流将转到 default 块,并打印 Not a vowel
作为输出。
由于所有元音字母的输出都相同,我们可以将 case 合并为:
示例 2:带分组 case 的 C# switch 语句
using System;
namespace Conditional
{
class SwitchCase
{
public static void Main(string[] args)
{
char ch;
Console.WriteLine("Enter an alphabet");
ch = Convert.ToChar(Console.ReadLine());
switch(Char.ToLower(ch))
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
Console.WriteLine("Vowel");
break;
default:
Console.WriteLine("Not a vowel");
break;
}
}
}
}
两个程序的输出相同。在上面的程序中,所有元音字母都打印输出 Vowel
,然后从 switch 语句中断。
虽然 switch 语句使代码看起来比 if...else if 语句更简洁,但 switch 只能与有限的数据类型一起使用。C# 中的 switch 语句仅适用于
- 原始数据类型:bool、char 和整型
- 枚举类型 (Enum)
- String 类
- 上述数据类型的可空类型
示例 3:使用 C# switch 语句的简单计算器程序
using System;
namespace Conditional
{
class SwitchCase
{
public static void Main(string[] args)
{
char op;
double first, second, result;
Console.Write("Enter first number: ");
first = Convert.ToDouble(Console.ReadLine());
Console.Write("Enter second number: ");
second = Convert.ToDouble(Console.ReadLine());
Console.Write("Enter operator (+, -, *, /): ");
op = (char)Console.Read();
switch(op)
{
case '+':
result = first + second;
Console.WriteLine("{0} + {1} = {2}", first, second, result);
break;
case '-':
result = first - second;
Console.WriteLine("{0} - {1} = {2}", first, second, result);
break;
case '*':
result = first * second;
Console.WriteLine("{0} * {1} = {2}", first, second, result);
break;
case '/':
result = first / second;
Console.WriteLine("{0} / {1} = {2}", first, second, result);
break;
default:
Console.WriteLine("Invalid Operator");
break;
}
}
}
}
当我们运行程序时,输出将是:
Enter first number: -13.11 Enter second number: 2.41 Enter operator (+, -, *, /): * -13.11 * 2.41 = -31.5951
上面的程序从用户那里获取两个操作数和一个运算符作为输入,并根据运算符执行操作。
使用 ReadLine()
和 Read()
方法从用户那里获取输入。要了解更多信息,请访问 C# 基本输入输出。
该程序使用 switch case 语句进行决策。另外,我们也可以使用 if-else if 梯形图来执行相同的操作。