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

C#中为自定义函数设置可选结构体参数报错求助

问题原因

FooBah是结构体(值类型),C#里值类型默认不能为null,所以你给CustomFunction的参数设置默认值null才会触发报错。

解决方法

下面是几种可行的方案:

方案一:使用可空结构体

把参数类型改成FooBah?(可空值类型),这样就能用null作为默认参数了:

private void CustomFunction(FooBah? foobah = null) {
    if(foobah.HasValue) {
        // 通过foobah.Value访问结构体成员
        string targetFoo = foobah.Value.foo;
        string targetBah = foobah.Value.bah;
        // 执行你的逻辑
    }
}

调用时可以正常传FooBah实例,也可以直接调用CustomFunction()使用默认的null。

方案二:用default作为默认参数

结构体默认有隐式无参构造,会把成员初始化为默认值(string类型就是null),你可以用default作为参数默认值:

private void CustomFunction(FooBah foobah = default) {
    // 判断是否是有效实例(比如检查成员是否不为空)
    if(!string.IsNullOrEmpty(foobah.foo) || !string.IsNullOrEmpty(foobah.bah)) {
        // 执行你的逻辑
    }
}

这种方式不需要修改参数类型,直接用原结构体类型即可。

方案三:重载函数

写一个不带参数的重载版本,内部调用带参数的版本并传入默认实例:

// 无参重载,使用默认的FooBah实例
private void CustomFunction() {
    CustomFunction(new FooBah(null, null));
}

// 带参数的原函数
private void CustomFunction(FooBah foobah) {
    if(!string.IsNullOrEmpty(foobah.foo) || !string.IsNullOrEmpty(foobah.bah)) {
        // 执行你的逻辑
    }
}

调用时可以根据需求选择带参或无参调用,逻辑分离更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 13:03:23