控制语句
switch
switch
语句可以用来替代 C# 中的 if...else if
语句。相比于 if...else if
,switch
语句的代码看起来更简洁、更易读。
switch
语句的语法
switch (变量/表达式)
{
case 值1:
// 当表达式(或变量)等于值1时执行的语句
break;
case 值2:
// 当表达式(或变量)等于值2时执行的语句
break;
...
default:
// 当没有匹配的case时执行的语句
break;
}
在 switch
语句中,表达式的值会依次与每个 case
的值进行比较,当找到匹配的值时,会执行该 case
下的语句。如果没有任何匹配的 case
,则执行 default
块的语句,这类似于 if...else
语句中的 else
。
break
语句的重要性
在每个 case
块的末尾通常会有一个 break
语句,它可以防止程序继续执行其他不匹配的 case
。没有 break
的情况下,程序会继续执行后续的所有 case
,直到遇到 break
或 switch
块的结束。
示例 1: 基本的 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
在这个程序中,用户被提示输入一个字母。字母将被转换为小写,然后 switch
语句判断这个字母是否是元音(a, e, i, o, u)。如果匹配到元音,则打印“Vowel”;如果没有匹配,则执行 default
块,打印“Not a vowel”。
示例 2: 合并 case
语句
在上一示例中,所有元音的输出都是相同的,因此我们可以将 case
语句合并:
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;
}
}
}
}
在这个版本中,程序的输出与之前相同,但代码更加简洁。所有元音的 case
被合并到了一起,只需要写一个输出。
switch
支持的数据类型
switch
语句在 C# 中可以用于以下几种数据类型:
- 原始数据类型:
bool
、char
和整型 - 枚举类型 (
enum
) string
类型- 上述数据类型的可空类型 (
nullable
)
示例 3: 使用 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
在这个程序中,用户输入两个数字和一个运算符,程序根据运算符执行相应的运算(加、减、乘、除)。使用 switch
语句可以轻松实现基于运算符的条件判断。
总结
switch
语句是一种更简洁的方式,替代复杂的if...else if
结构。- 它的使用主要基于数据类型的有限性,适用于
char
、整型、enum
和string
类型等。 switch
语句通过case
和default
实现多路径选择,利用break
语句避免执行非匹配的代码。