C#选择语句switch
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类型的判断表达式 |
|
执行效率 |
具体值判定时,效率更高 |
范围判断时,效率更稳定 |
💡 核心总结:
-
使用场景区分(重点):if适合【范围】的判定,switch适合【具体值】的判定。
-
转换说明:二者之间可以互相转换,但不推荐(不符合“场景适配”原则,会降低代码可读性和效率)。
-
优先级:能使用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 分支语句(执行效率更高)
核心要点:
-
场景适配是关键:if适合【范围判定】,switch适合【具体值判定】,二者可互相转换但不推荐,避免降低效率和可读性。
-
switch 必须注意 break 的使用,避免case穿透;if-else 注意条件顺序,避免逻辑混乱(范围大的条件放后面)。
-
代码编写优先保证可读性,嵌套层级不宜过多(≤3层),case合并仅用于“多个固定值执行相同逻辑”的场景。
if-else 和 switch 都是 C# 中基础的条件流程控制语句,核心是“根据条件执行不同代码”,两者各有适用场景,按需选择:
-
单条件无兜底 → 基础 if
-
二选一 → if...else
-
多条件互斥(范围判断) → if...else if...else
-
多条件不互斥 → 连续独立 if
-
多层筛选 → 条件嵌套
-
变量匹配固定值(如星期、月份、枚举) → switch 分支语句
重点:
-
if-else 灵活度高,可处理任意bool表达式,适合范围判断;switch 可读性强,适合固定值匹配,可替代复杂if-else if-else。
-
switch 必须注意 break 的使用,避免case穿透;if-else 注意条件顺序,避免逻辑混乱。
-
代码编写优先保证可读性,根据实际场景选择合适的条件控制语句。
更多推荐
所有评论(0)