构造函数中的数据不正确

时间:2010-09-04 14:13:49

标签: c# error-handling constructor

我有一个班级

class Rational
{
   private int _n;
   private int _m;

   public Rational(int n, int m)
   {
      _n = n;
      _m = m;
   }
}

m应为> 0。如何通知用户他向构造函数输入了错误的数据?

3 个答案:

答案 0 :(得分:4)

您可以抛出ArgumentException或添加需要m > 0

的合约
if(m <= 0) throw new ArgumentException("Denominator must be positive");

public Rational(int n, int m)
{
    Contract.Requires(m > 0);
    _n = n;
    _m = m;
}

答案 1 :(得分:3)

尽管它存在争议(特别是在C ++中),但我认为最直接的做法是抛出ArgumentException

Microsoft准则recommend throwing exceptions from constructors何时有意义,例如,如果参数不允许创建可用对象(这是您的情况)。

答案 2 :(得分:2)

在C#中,文章http://msdn.microsoft.com/en-us/library/ms229060.aspx中有官方构造函数设计指南,并且在那里它表示在适当的情况下从实例构造函数中抛出异常

我会说抛出一个参数异常,正如其他人所说,但我会使用一些警告,如果你在对象中创建了任何Disposable,那么在抛出异常之前进行清理