gpt4 book ai didi

c# - 验证构造函数参数

转载 作者:太空宇宙 更新时间:2023-11-03 20:24:13 27 4
gpt4 key购买 nike

我有一个有两个构造函数的类:

MyObjGroup(MyObj primaryObj)
MyObjGroup(MyObj primaryObj, MyObj secondaryObj)

primaryObj 始终是必需的。 secondaryObj 不是。显然,您可以调用 MyObjGroup(myObj)MyObjGroup(myObj, null) 并最终得到相同的结果。

我首先考虑做的是在我的第一个 ctor 中,检查 primaryObj 上的 null 并抛出 ArgumentNullException。我还需要在我的辅助 ctor 中执行此操作,复制代码,因此我考虑将其移至属性 setter 。

private MyObj _primaryObj;
public MyObj PrimaryObj
{
get {return _primaryObj;}
private set
{
if(value == null) throw new ArgumentNullException("value", "PrimaryObj cannot be null");
_primaryObj = value;
}
}

但是,属性中参数的名称是value,而在ctor 中它被称为primaryObj。另一个 ctor(天堂禁止)可能会叫它别的东西,所以不能保证你有正确的名字。

这里推荐的行动方案是什么?

最佳答案

检查第一个构造函数中的值,并让第二个构造函数传递给它以避免重复代码。

public MyObjGroup(MyObj primaryObj) 
{
if(primaryObj == null)
throw new ArgumentNullException("value", "PrimaryObj cannot be null");
}

public MyObjGroup(MyObj primaryObj, MyObj secondaryObj)
: this(primaryObj)
{
SecondaryObj = secondaryObj;
}

关于c# - 验证构造函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11618865/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com