为什么在类的构造函数中抛出异常是错误的

时间:2016-06-04 16:12:44

标签: c#

我有一个在构造函数级别具有Id赋值的类。我希望id参数大于0.如果它是0或负数它会导致问题所以如果传递的值不符合标准我想抛出异常:

public class Employee
{
    int _id;
    string name;

    public Employee(int id, string name)
    {
        if(id<1) throw new Exception("ID must be positive, greater than 0);
        _id=id;
        this.name = name;
    }
}

这是正确的方法吗?

1 个答案:

答案 0 :(得分:2)

这不是错误,保护班级的不变量是一件有效的事情。如果你没有这样做,就有可能创建一个你无法想要的无效状态的对象。

我建议您使用更合适的异常类型。投掷ArgumentOutOfRangeException将更接近您与呼叫者实际通信的内容。

来自the docs

  

调用方法时抛出ArgumentOutOfRangeException异常,并且传递给方法的至少一个参数不为null,并且包含的​​无效值不是参数所需的值集合的成员。