在 C# 中,switch 表达式与旧式 switch 语句相比,有哪些主要区别?
考察说明
考查对 C# 中 switch 表达式和传统 switch 语句特性的理解与对比能力。
回答思路
- 【回答框架 1】语法形式不同:switch 表达式是表达式,产生一个值;传统 switch 语句是语句,不产生值,通常使用赋值或控制流。
- 【回答框架 2】模式匹配能力增强:switch 表达式支持更多模式,如属性模式、位置模式等;传统 switch 语句在 C# 7 后也支持模式,但表达式更简洁。
- 【回答框架 3】行为差异:switch 表达式要求每个 arm 必须产生值,且使用箭头 => 语法;传统 switch 语句使用 case 标签和 break 或 goto。
- 【回答框架 4】作用域和流程控制:switch 表达式中变量作用域更紧凑,但传统 switch 支持 fall-through(C# 中需显式 goto 或 break 防止贯穿)。
- 【回答框架 5】适用场景:switch 表达式适合简洁地返回映射值;传统 switch 语句适合需要多个语句或复杂分支逻辑的场景。
- 【关键点 1】switch 表达式是表达式,返回值;传统 switch 是语句,不返回值。
- 【关键点 2】switch 表达式使用 => 语法,要求每个分支产生值。
- 【关键点 3】传统 switch 支持 fall-through(需注意 break 要求),switch 表达式不允许贯穿。
- 【关键点 4】switch 表达式支持更丰富的模式匹配。
- 【关键点 5】选择取决于是否需返回值及分支复杂度。
- 【易错点 1】不要混淆 switch 表达式的贯通与传统语句的 fall-through。
- 【易错点 2】在传统 switch 中遗漏 break 会导致编译错误,而非自动贯穿。
- 【易错点 3】switch 表达式每个 arm 必须赋值,否则编译错误。