Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 构造函数中的数据不正确_C#_Error Handling_Constructor - Fatal编程技术网

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;
}