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

C#中使用[Optional]特性标记的参数如何判断是否被调用方主动传入?

解决方案

方案1:可空值类型参数标记

将[Optional]特性修饰的参数改为可空值类型int?,默认取值为null,即可通过是否为null精准判断调用方是否主动传参:

class Program
{
    static void Main(string[] args)
    {
        var c1 = cc(5); // 未传b参数,b取值为null
        var c2 = cc(5, 0); // 主动传入0,b取值为0
    }
    public static int cc(int a, [Optional] int? b)
    {
        int c = 0;
        if(b.HasValue)
        {
            // 调用方主动传参分支
            c = a * b.Value;
        }
        else
        {
            // 未传参走默认逻辑分支
            c = a * a;
        }
        return c;
    }
}

该方案无需修改现有调用侧代码,即可完美区分主动传0和未传参的两种场景。

方案2:方法重载(更推荐)

不需要依赖[Optional]特性,直接定义两个方法重载即可天然区分两种调用场景,代码可读性和可维护性更高:

class Program
{
    static void Main(string[] args)
    {
        var c1 = cc(5); // 匹配单参数重载
        var c2 = cc(5, 0); // 匹配双参数重载
    }
    // 仅带a参数的重载,对应未传b的场景
    public static int cc(int a)
    {
        return a * a;
    }
    // 带a、b两个参数的重载,对应主动传b的场景
    public static int cc(int a, int b)
    {
        return a * b;
    }
}

内容的提问来源于stack exchange,提问作者user8630414

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:15:05