1. 核心基础认知

✅ 核心作用:与if-else一样属于条件流程控制,适用于“变量匹配固定值”的场景,语法更简洁,可读性更强,可替代复杂的if-else if-else。

📌 核心语法:

switch(变量) // 括号内是要判断的变量(支持int、string、枚举等类型)
{
    case 固定值1: // 变量 == 固定值1 时执行
        执行语句;
        break; // 必须写break,跳出switch,避免“穿透”(执行后续case)
    case 固定值2:
        执行语句;
        break;
    ...
    default: // 兜底,变量不匹配任何case时执行(类似if-else的else)
        兜底语句;
        break; // 兜底的break可省略,但推荐写
}

💡 关键要点:

  • case后必须跟“固定值”(不能是判断表达式,如case 1>2 是错误的)。

  • break的作用:执行完当前case的语句后,跳出整个switch,否则会继续执行下一个case(case穿透,非特殊需求不推荐)。

  • default:可选,用于处理“变量不匹配任何case”的情况,建议添加,保证逻辑完整性。

2. switch 各类用法详解(对应原代码)

(1)基础用法:变量为int类型(星期判断)

✅ 适用场景:变量是int类型,匹配多个固定整数取值。

int day = 8;
switch (day)
{
    case 1: // day == 1,输出星期一
        Console.WriteLine("星期一");
        break;
    case 2: // day == 2,输出星期二
        Console.WriteLine("星期二");
        break;
    // 省略case 3-6
    case 7: // day == 7,输出星期天
        Console.WriteLine("星期天");
        break;
    default: // day不是1-7,兜底输出错误提示
        Console.WriteLine("输入星期有误");
        break;
}

💡 注意:若day=8,不匹配任何case,执行default语句;若某个case省略break,会继续执行下一个case(如case 1不写break,day=1时会同时执行case1和case2的语句)。

(2)进阶用法:多个case共用一个执行逻辑(case合并)

✅ 适用场景:多个不同的固定值,需要执行相同的代码(无需重复编写执行语句)。

int count = 4;
switch (count)
{
    case 1: // count==1 时,不执行语句,直接进入下一个case
    case 2: // count==1或count==2,都执行以下语句
        Console.WriteLine("count==2");
        break; // 执行完后跳出switch
    case 3: // count==3,执行单独语句
        Console.WriteLine("count==3");
        break;
    default:
        break;
}

💡 关键:多个case合并时,前面的case不写break,仅在最后一个共用case后写break,实现“多个值匹配同一逻辑”。

(3)扩展用法:变量为string类型(字符串匹配)

✅ 适用场景:变量是string类型,匹配多个固定字符串(区分大小写)。

string name = "小张三";
switch (name)
{
    case "大山": // name=="大山"
    case "小张": // name=="小张"
    case "张三": // name=="张三",三个case共用逻辑
        Console.WriteLine("叫对了");
        break;
    default: // name不匹配任何上述字符串
        Console.WriteLine("叫错了");
        break;
}
(5)高级用法:变量为枚举类型(枚举匹配)

✅ 适用场景:变量是枚举类型(提前定义固定取值范围),代码更规范、可读性更高(推荐用于固定选项场景,如季节、性别等)。

/ 枚举类型定义(在class外部、namespace内部)
enum Season
{
    Spring,//春天(默认取值为0,可自定义,如Spring=1)
    Summer,//夏天(取值1)
    Autumn,//秋天(取值2)
    Winter //冬天(取值3)
}
Season 季节 = Season.Summer; // 枚举变量赋值(只能取枚举中定义的值)
switch (季节)
{
    case Season.Spring: // 季节 == Season.Spring
        Console.WriteLine("春天");
        break;
    case Season.Summer: // 季节 == Season.Summer
        Console.WriteLine("夏天");
        break;
    // 省略Autumn、Winter case
    default:
        break;
}

💡 优势:避免输入错误(枚举变量只能赋值枚举中定义的值),比string、int类型更规范。

3. switch 与 if-else 的区别(重点)

对比维度

switch 分支语句

if-else 分支语句

适用场景

变量匹配固定值(如星期、月份、枚举、选项),执行效率更高

判断表达式(如>、<、&&、||,范围判断)

可读性

多个固定值时,语法简洁,可读性强

范围判断时,逻辑清晰,灵活度高

灵活性

较低,只能匹配固定值,不能写判断表达式

较高,可处理任意bool类型的判断表达式

执行效率

具体值判定时,效率更高

范围判断时,效率更稳定

💡 核心总结:

  1. 使用场景区分(重点):if适合【范围】的判定,switch适合【具体值】的判定。

  2. 转换说明:二者之间可以互相转换,但不推荐(不符合“场景适配”原则,会降低代码可读性和效率)。

  3. 优先级:能使用switch的场景(具体值匹配),优先用switch(效率高、可读性强);范围判断只能用if-else。

对比维度

switch 分支语句

if-else 分支语句

适用场景

变量匹配固定值(如星期、月份、枚举)

判断表达式(如>、<、&&、||,范围判断)

可读性

多个固定值时,语法简洁,可读性强

范围判断时,逻辑清晰,灵活度高

灵活性

较低,只能匹配固定值,不能写判断表达式

较高,可处理任意bool类型的判断表达式

💡 总结:能使用switch的场景,都能替换成if-else,但反之不一定(如范围判断,switch无法实现);优先在“变量匹配固定值”时使用switch,提升代码可读性。

3、核心总结

if-else 和 switch 都是 C# 中基础的条件流程控制语句,核心是“根据条件执行不同代码”,两者各有适用场景,按需选择,优先保证代码可读性和执行效率:

  • 单条件无兜底 → 基础 if

  • 二选一 → if...else

  • 多条件互斥(范围判断) → if...else if...else

  • 多条件不互斥 → 连续独立 if

  • 多层筛选 → 条件嵌套

  • 变量匹配固定值(如星期、月份、枚举、选项) → switch 分支语句(执行效率更高)

核心要点:

  1. 场景适配是关键:if适合【范围判定】,switch适合【具体值判定】,二者可互相转换但不推荐,避免降低效率和可读性。

  2. switch 必须注意 break 的使用,避免case穿透;if-else 注意条件顺序,避免逻辑混乱(范围大的条件放后面)。

  3. 代码编写优先保证可读性,嵌套层级不宜过多(≤3层),case合并仅用于“多个固定值执行相同逻辑”的场景。

if-else 和 switch 都是 C# 中基础的条件流程控制语句,核心是“根据条件执行不同代码”,两者各有适用场景,按需选择:

  • 单条件无兜底 → 基础 if

  • 二选一 → if...else

  • 多条件互斥(范围判断) → if...else if...else

  • 多条件不互斥 → 连续独立 if

  • 多层筛选 → 条件嵌套

  • 变量匹配固定值(如星期、月份、枚举) → switch 分支语句

重点:

  1. if-else 灵活度高,可处理任意bool表达式,适合范围判断;switch 可读性强,适合固定值匹配,可替代复杂if-else if-else。

  2. switch 必须注意 break 的使用,避免case穿透;if-else 注意条件顺序,避免逻辑混乱。

  3. 代码编写优先保证可读性,根据实际场景选择合适的条件控制语句。

更多推荐