当前位置: 首页 > news >正文

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

switch表达式必须返回值,是结果导向的;需覆盖所有可能路径,支持类型匹配+when守卫,不可fall-through,null和_兜底需显式处理,不适用于副作用或条件耦合场景。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产品图添加背景

http://www.jsqmd.com/news/645075/

相关文章:

  • Qt5实战:用QTableView实现高效分页(附完整源码)
  • 比chmod更灵活!Ubuntu下setfacl的7个高阶用法(附真实案例)
  • MTK芯片Android 8.1设备获取完整root权限的5个关键步骤(附实测避坑指南)
  • IEEE LaTeX模板引用格式总调不对?可能是你的.bib文件多了这些“垃圾”字段
  • 2025网盘直链下载神器:八大平台高速下载完整指南
  • ChatGPT+图表狐:5分钟搞定深度学习Loss曲线可视化(附实战截图)
  • STM32F4 ADC初始化实战:从零开始配置模数转换器
  • Bootstrap5 滚动监听
  • 罗技鼠标宏压枪终极指南:3分钟快速上手绝地求生自动压枪
  • Bilibili视频解析终极指南:三步快速上手免费API工具
  • 深入解析:Flutter 项目结构该如何设计,才能支撑长期迭代
  • 文档密码破解工具
  • 算法训练营第二天| 27.移除元素
  • 探索前沿技术趋势:2023年最值得关注的五大创新领域
  • C语言的循环语句
  • netDxf终极指南:.NET开发者的CAD文件处理神器
  • SAP BSP网页端开发实战:从SE80到MVC架构的完整指南
  • 无实体公司在美国如何雇人?一文读懂Safeguard Global名义雇主EOR服务 - 品牌2026
  • LIN总线开发避坑指南:用LDF Tool处理NAD分配与信号编码的5个关键细节
  • 企业智能体安全管理:从开源探索到企业级落地的必经之路 - 品牌2026
  • 高效数据处理 | 利用EXCEL插件实现度分秒与弧度、度的快速互转
  • 胡桃工具箱终极指南:免费开源原神助手如何提升你的游戏体验
  • 2025届必备的降AI率方案实际效果
  • VC++ 打造小型HTTP服务器
  • 终极指南:如何用novideo_srgb实现硬件级显示器色彩校准,解决宽色域显示器色彩过饱和问题
  • GetQzonehistory:你的QQ空间记忆守护者,永久保存青春时光
  • DETR模型训练AP=0?别慌!手把手教你排查自定义数据集常见问题
  • linux启动关闭java程序
  • GD32F103实战指南(3)——从零搭建Keil工程模板
  • 告别Windows系统管理烦恼:WinUtil一站式解决方案指南