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

能否使用空条件运算符将Func<>设置为null?场景需求问询

C# 委托传入控制与构造函数异常触发问题

场景代码

类A

public class A
{
    private readonly Func<bool> _myFunction;
    ...
    public A(Func<bool> myFunction)
    {
        _myFunction = myFunction ?? throw new ArgumentNullException();
    }
}

类B

public class B
{
    private bool _myBool;
    public bool MyBool => _myBool;
}

类C

public class C
{
    A a;
    B b;
    ...
    public void SomeFunction()
    {
        a = new A( () => (bool)b?.MyBool );
    }
}

需求说明

希望在b未实例化时,向A的构造函数传入null,从而触发构造函数内的ArgumentNullException。理想效果等价于:

if (b == null) {a = new A(null);} else {a = new A(() => b.MyBool);}

原写法使用空条件运算符后,只是创建了一个返回null的有效委托引用,无法触发构造函数的异常,因此需要调整写法。

解决方案

直接通过三元运算符判断b是否为null,决定传入的参数是null还是对应委托:

public void SomeFunction()
{
    a = new A(b == null ? null : () => b.MyBool);
}

这种写法会在b为null时直接传入null,触发A构造函数的ArgumentNullException;当b已实例化时,传入捕获b的委托,符合预期逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:31:08