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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:06:03