能否使用空条件运算符将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
相关产品推荐
相关产品推荐

