C#怎么使用Switch表达式 C#新版switch表达式和传统switch语句的区别和升级写法【语法】

张开发
2026/4/15 13:59:06 15 分钟阅读

分享文章

C#怎么使用Switch表达式 C#新版switch表达式和传统switch语句的区别和升级写法【语法】
switch表达式必须返回值是结果导向的需覆盖所有可能路径支持类型匹配when守卫不可fall-throughnull和_兜底需显式处理不适用于副作用或条件耦合场景。Switch表达式必须返回值不能只“做事情”传统 switch 语句是“动作导向”的匹配后执行一段逻辑比如调用方法、修改变量、break 跳出。而 switch 表达式是“结果导向”的——它本身就是一个值必须为每个分支提供一个返回结果编译器会强制你填满所有可能路径。写成语句却没返回值编译直接报错CS8506: No best type was found for the switch expression漏掉 _ ... 兜底如果输入类型或范围无法被穷举比如 int编译器会警告甚至报错CS8509: The switch expression does not handle all possible values想在某个分支里 Console.WriteLine 然后“啥也不返”不行。得包装成表达式例如() { Console.WriteLine(log); return done; }但这就违背简洁初衷了类型匹配 when 守卫是核心能力别只当“高级if”用新版 switch 表达式真正拉开差距的地方不是语法短而是能一次性完成「类型判断 变量绑定 条件过滤」三件事。传统写法要靠 is as if 套娃容易出空引用或重复转换。错误示范传统if (obj is string s s.Length 0) { ... } else if (obj is int i i 100) { ... }正确写法表达式obj switch { string s when s.Length 0 $非空字符串:{s}, int i when i 100 $大整数:{i}, _ 其他 }注意when 后面是任意布尔表达式可访问绑定的变量如 s、i但不能捕获外部作用域中同名变量会遮蔽枚举组合模式很实用day switch { DayOfWeek.Saturday or DayOfWeek.Sunday 休息日, _ 工作日 }从传统 switch 语句升级时最常踩的三个坑不是把 {} 换成 就算升级成功。结构差异导致行为隐性变化稍不注意就引入 bug。 Mokker AI AI产品图添加背景

更多文章