构造函数和抛出异常

时间:2011-12-04 01:27:40

标签: c# exception

如果对象的参数未传入有效数据,这是否是中止对象实例化的最佳方法?

protected Command(string commandKey)
{
    if(commandKey == null) throw new ArgumentNullException("commandKey", "Command Key cannot be null as it is required internally by Command");
    if(commandKey == "") throw new ArgumentException("Command Key cannot be an empty string");
    CommandKey = commandKey;
}

5 个答案:

答案 0 :(得分:1)

是。通常的做法是验证构造函数中的参数,如果它们无效则抛出异常。

答案 1 :(得分:0)

完全没问题。构造函数不会返回任何内容,所以如果出现问题,您还知道怎么回事?你可以有一个bool将它设置为某种未初始化的状态,但我会选择例外。

另外:

if(String.IsNullOrEmpty(commandKey)) //throw exectpion

答案 2 :(得分:0)

在这种情况下,您可以使用静态方法string.IsNullOrEmpty(commandKey):

protected Command(string commandKey) 
{ 
    if(string.IsNullOrEmpty(commandKey))
        throw new ArgumentException("commandKey");
    //something
} 

答案 3 :(得分:0)

如果您查看框架源代码,这正是Microsoft所做的,所以我怀疑它完全有效。

答案 4 :(得分:0)

如果在构造函数内部进行验证并在出现问题时抛出异常,那就完全没了问题。