C# 构造函数中的数据不正确
我有一节课C# 构造函数中的数据不正确,c#,error-handling,constructor,C#,Error Handling,Constructor,我有一节课 class Rational { private int _n; private int _m; public Rational(int n, int m) { _n = n; _m = m; } } 但是m应该是>0。我应该怎么做才能通知用户他向构造函数输入了不正确的数据?您可以抛出一个ArgumentException或添加一个要求m>0 if(m <= 0) throw new ArgumentException(
class Rational
{
private int _n;
private int _m;
public Rational(int n, int m)
{
_n = n;
_m = m;
}
}
但是
m
应该是>0
。我应该怎么做才能通知用户他向构造函数输入了不正确的数据?您可以抛出一个ArgumentException
或添加一个要求m>0
if(m <= 0) throw new ArgumentException("Denominator must be positive");
虽然它有争议(特别是在C++中),但我认为最简单的方法是抛出
ArgumentException
Microsoft指南,如果它有意义,例如,如果参数不允许创建可用对象(这是您的情况)。在C#中有官方的构造函数设计指南,文章中说,如果合适,请从实例构造函数中抛出异常
我会像其他人所说的那样抛出一个参数异常,但我会使用一些警告,如果您在对象中创建了任何可丢弃的东西,在抛出异常之前进行清理@Sergey Gavruk在构造函数中抛出一个
ArgumentException
或ArgumentNullException
,这是完全正常的,而且在许多核心.net类中都使用了这种做法。@Sergey-我知道,只要没有资源(例如文件句柄)泄漏,就没有理由不这样做。BCL类通常会这样做——如果无法在有效状态下创建对象,那么它可以做的唯一明智的事情就是抛出异常。
public Rational(int n, int m)
{
Contract.Requires(m > 0);
_n = n;
_m = m;
}