我们来详细讲解一下C#中 switch
语句的用法。对于初学者来说,switch
语句是处理多条件分支的利器,比一连串的 if-else if
更加清晰和高效。
1. switch 语句的基本结构
switch
语句根据一个表达式的值,选择多个可能的分支之一来执行。
基本语法:
switch (expression)
{
case value1:
// 当 expression 等于 value1 时执行的代码
break;
case value2:
// 当 expression 等于 value2 时执行的代码
break;
case value3:
// 当 expression 等于 value3 时执行的代码
break;
default:
// 当 expression 不匹配任何 case 时执行的代码
break;
}
2. 一个简单的完整示例
Console.WriteLine("请选择你的早餐 (1-面包, 2-鸡蛋, 3-牛奶):");
string choice = Console.ReadLine();
switch (choice)
{
case "1":
Console.WriteLine("你选择了面包。");
break;
case "2":
Console.WriteLine("你选择了鸡蛋。");
break;
case "3":
Console.WriteLine("你选择了牛奶。");
break;
default:
Console.WriteLine("请输入1-3之间的数字!");
break;
}
3. switch 语句的重要规则
规则 1:必须使用 break
在C#中,每个 case
分支都必须以 break
、return
或 goto
结束。这是为了防止"case穿透"(fall-through)。
错误示例:
case "1":
Console.WriteLine("面包");
// 这里缺少 break,会编译错误!
case "2":
Console.WriteLine("鸡蛋");
break;
规则 2:default 分支是可选的
default
分支用于处理所有 case
都不匹配的情况,但不是必须的。
int day = 8;
switch (day)
{
case 1:
Console.WriteLine("星期一");
break;
case 2:
Console.WriteLine("星期二");
break;
// 如果没有 default,且 day=8,就什么都不执行
}
4. 现代C#中的增强功能
多个case共享同一段代码
从C# 7.0开始,可以让多个 case
共享相同的执行代码:
Console.WriteLine("请输入月份数字:");
int month = int.Parse(Console.ReadLine());
switch (month)
{
case 12:
case 1:
case 2:
Console.WriteLine("冬季");
break;
case 3:
case 4:
case 5:
Console.WriteLine("春季");
break;
case 6:
case 7:
case 8:
Console.WriteLine("夏季");
break;
case 9:
case 10:
case 11:
Console.WriteLine("秋季");
break;
default:
Console.WriteLine("无效的月份!");
break;
}
switch 表达式(C# 8.0+)
更简洁的写法,适合简单的赋值操作:
string timeOfDay = DateTime.Now.Hour switch
{
>= 5 and < 12 => "早上",
>= 12 and < 18 => "下午",
>= 18 and < 24 => "晚上",
_ => "深夜" // _ 表示 default
};
Console.WriteLine($"现在是{timeOfDay}");
5. 实际应用示例
示例1:成绩等级判断
Console.WriteLine("请输入分数:");
int score = int.Parse(Console.ReadLine());
string grade = score switch
{
>= 90 => "优秀",
>= 80 => "良好",
>= 70 => "中等",
>= 60 => "及格",
_ => "不及格"
};
Console.WriteLine($"你的等级是: {grade}");
示例2:计算器程序
Console.WriteLine("请输入第一个数字:");
double num1 = double.Parse(Console.ReadLine());
Console.WriteLine("请输入运算符 (+, -, *, /):");
char op = Console.ReadLine()[0];
Console.WriteLine("请输入第二个数字:");
double num2 = double.Parse(Console.ReadLine());
double result = 0;
bool validOperation = true;
switch (op)
{
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 != 0)
result = num1 / num2;
else
Console.WriteLine("错误:除数不能为零!");
break;
default:
Console.WriteLine("无效的运算符!");
validOperation = false;
break;
}
if (validOperation)
{
Console.WriteLine($"结果: {result}");
}
6. 练习建议
为了熟练掌握 switch
语句,建议你尝试以下练习:
星期转换器:输入数字1-7,输出对应的星期几
简单菜单系统:创建一个有多个选项的菜单程序
温度单位转换:在摄氏、华氏、开尔文之间转换
石头剪刀布游戏:用switch判断游戏结果
7. 常见错误及解决方法
总结
switch
语句是处理多条件分支的强大工具:
基本结构:
switch
+case
+break
+default
必须遵守:每个case都要以break结束
现代用法:支持多个case共享代码,还有更简洁的switch表达式
适用场景:当需要根据一个变量的不同值执行不同操作时
记住:多写代码是掌握的最佳方式!尝试用 switch
重写你之前用 if-else
实现的程序,体会它们的区别和适用场景。