如何将nullable类型字段作为参数传入接收非nullable参数的函数
C# 可空值类型传入非可空参数方法的实现方案
针对decimal?类型字段无法直接传入接收decimal参数方法的问题,可根据实际业务场景选择以下几种实现方式:
场景1:可以100%确认调用时
Price一定有值,不会为null
直接调用可空值类型的Value属性取值传入即可:CalculatePercentage(model.Price.Value, updatePrice, updateType);注意:如果运行时
Price为null,该写法会抛出InvalidOperationException异常场景2:
Price可能为null,希望null时使用指定默认值参与计算
使用空合并运算符??指定默认值,示例中默认值设为0:CalculatePercentage(model.Price ?? 0m, updatePrice, updateType);该写法不会抛出空相关异常,
Price为null时会自动用指定的默认值执行计算。场景3:
Price为null时不需要执行计算,要走单独的分支逻辑
先判断可空值的HasValue属性,再分分支处理:if (model.Price.HasValue) { var result = CalculatePercentage(model.Price.Value, updatePrice, updateType); // 此处处理计算完成后的逻辑 } else { // 此处处理Price为null的逻辑,例如参数校验报错、跳过计算等 }
额外说明:如果使用的是C# 8及以上版本,且已经通过前置逻辑保证调用时Price一定不为null,可以用空值断言运算符!告知编译器不需要做空值警告,写法为model.Price!,运行时行为和直接调用Value一致。
内容的提问来源于stack exchange,提问作者Mohamed
相关产品推荐
相关产品推荐

