You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化C#中解析捷克出生证号月份的if-else语句?

改写正确性判定

你的switch表达式改写是完全正确的,和原有if-else逻辑100%等价:

  • 所有区间判断规则和原有分支完全对应,计算逻辑(减去对应偏移量)也完全一致
  • 兜底分支抛出自定义异常的逻辑和原有else分支完全对齐
  • 只要项目的C#语言版本确实是9.0及以上,这段代码的运行结果和原实现没有任何差异,而且可读性、简洁度都优于多分支if-else写法。

强制类型转换的原因

这是C#的基础类型规则导致的:

  • ushort属于16位无符号整型,属于小于32位整型的数值类型,C#规定所有小于int的数值类型在进行算术运算时,会自动类型提升为int类型参与计算。
  • 你代码里RawMonth - 20、RawMonth - 50等运算,结果都会自动转为int类型,而你的ResolvedMonth属性要求返回ushort类型,int到ushort属于可能丢失精度的窄化转换,C#不允许隐式转换,所以必须手动添加强制类型转换(ushort)才能通过编译。
  • 你可以注意到第一个分支直接返回RawMonth不需要转换,就是因为它本身就是ushort类型,没有做算术运算,不存在类型提升的问题。

内容的提问来源于stack exchange,提问作者Vlastimil Burián

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:45:03