如何实现可空Boolean转可空short的C#扩展方法
语法错误修正方案
原代码存在的问题
- 三元运算符逻辑颠倒:
b.HasValue ? null的逻辑是当入参有值时返回null,和需求完全相反 - 内层三元运算符语法不符合C#规范:三元运算符的正确结构为
条件 ? 满足时返回值 : 不满足时返回值,原代码把?和:的位置写反 - 缺少类型显式声明:直接返回的
1、0默认是int类型,和方法返回值short?不匹配,会触发类型推断错误
修正后的代码
基础兼容写法(支持所有C#版本)
public static short? ToShortNullable(this bool? b) { return b.HasValue ? (b.Value ? (short)1 : (short)0) : null; }
简化写法(支持C# 8及以上版本)
用switch表达式可以让代码更简洁易读:
public static short? ToShortNullable(this bool? b) => b switch { true => 1, false => 0, null => null };
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

