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

C# 为什么在类的构造函数中抛出异常是错误的,c#,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参数大于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;
    }
}
公共类员工
{
内部id;
字符串名;
公共雇员(整数id,字符串名称)
{

如果(id没有错,那么保护类的不变量是有效的。如果不这样做,可能会创建一个无效状态的对象,这是您不希望的

不过,我建议您使用更合适的异常类型。抛出
ArgumentOutOfRangeException
将更接近您实际与调用方进行的通信

发件人:

当调用某个方法且传递给该方法的参数中至少有一个不为null且包含无效值(该值不是该参数所需的值集的成员)时,将引发ArgumentOutOfRangeException异常


这没有错,这是保护类不变量的有效方法。如果不这样做,可能会创建一个无效状态的对象,这是您不希望的

不过,我建议您使用更合适的异常类型。抛出
ArgumentOutOfRangeException
将更接近您实际与调用方进行的通信

发件人:

当调用某个方法且传递给该方法的参数中至少有一个不为null且包含无效值(该值不是该参数所需的值集的成员)时,将引发ArgumentOutOfRangeException异常


我还建议,如果您不接受小于0的值,则将其作为一个单位。除非您担心数学运算,否则您的类型应反映您的限制。这是对使用classI的人的提示。我还建议,如果您不接受小于0的值,则将其作为一个单位。除非您担心m您的类型应该反映您的限制。这是对使用该类的人的提示