Administrator
发布于 2025-09-21 / 7 阅读
0
0

C#4.2:Switch语句用法详解

我们来详细讲解一下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 分支都必须以 breakreturngoto 结束。这是为了防止"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. 星期转换器:输入数字1-7,输出对应的星期几

  2. 简单菜单系统:创建一个有多个选项的菜单程序

  3. 温度单位转换:在摄氏、华氏、开尔文之间转换

  4. 石头剪刀布游戏:用switch判断游戏结果

7. 常见错误及解决方法

错误类型

示例

解决方法

缺少break

case 1: Console.WriteLine("1");

在每个case末尾添加break

case值重复

case 1: ... case 1: ...

确保每个case的值唯一

类型不匹配

int num = 1; switch(num) { case "1": ... }

确保case值与switch表达式类型一致

总结

switch 语句是处理多条件分支的强大工具:

  • 基本结构switch + case + break + default

  • 必须遵守:每个case都要以break结束

  • 现代用法:支持多个case共享代码,还有更简洁的switch表达式

  • 适用场景:当需要根据一个变量的不同值执行不同操作时

记住:多写代码是掌握的最佳方式!尝试用 switch 重写你之前用 if-else 实现的程序,体会它们的区别和适用场景。


评论