ArgumentException和Exception之间有什么区别?

时间:2016-04-22 00:40:25

标签: c# argumentexception

在我们教授的示例代码中,他有一个看起来像这样的片段:

mystring.Replace("xx", "x");

另一个看起来像这样的片段:

if (name == null || name == "")
    throw new ArgumentException("name is null or empty");

我只是想知道不同之处是什么以及为什么一个在另一个之上使用

3 个答案:

答案 0 :(得分:5)

Exception是所有异常的基类。 ArgumentException用于表示参数无效。它是Exception的子类。使用catch,您实际上可以根据异常的类型进行过滤,并以不同的方式处理每个异常。

MSDN很好地描述了它:

  

当您必须抛出异常时,通常可以在.NET Framework中使用现有的异常类型,而不是实现自定义异常。您应该在这两个条件下使用标准异常类型:

     
      
  • 您正在抛出一个由使用错误引起的异常(即,由调用您的方法的开发人员的程序逻辑中的错误)。通常,您将抛出异常,例如ArgumentException,ArgumentNullException,InvalidOperationException或NotSupportedException。在实例化异常对象时,您提供给异常对象的构造函数的字符串应描述错误,以便开发人员可以修复它。有关更多信息,请参阅Message属性。
  •   
  • 您正在处理可以使用现有.NET Framework异常传递给调用方的错误。您应该抛出最多派生的异常。例如,如果方法要求参数是枚举类型的有效成员,则应抛出InvalidEnumArgumentException(派生类最多的类)而不是ArgumentException。
  •   

答案 1 :(得分:1)

Exception是一个基类。这只是最普遍的例外。在许多情况下,可以使用更具体的类型来提供有关发生的错误类型的更多信息。在这种情况下,ArgumentException是一种异常,表示参数存在错误。

TLDR:ArgumentException是一种用于提供更详细信息的Exception

答案 2 :(得分:1)

对象是所有事物的根源。

有许多对象的子类型。例外就是其中之一。

Exception有许多子类型。 SystemException就是其中之一。

SystemException有许多子类型。 ArgumentException就是其中之一。

ArgumentException有很多子类型。 ArgumentNullException和ArgumentOutOfRangeException是其中两个。

如果你的教授真的想要使用最明确的例外,他们可以写

PlotBoxAspectRatio