2016-04-22 64 views
1

在我们教授的示例代码,他有一个片段,它看起来像这样:ArgumentException和just Exception之间的区别是什么?

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

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

if (!File.Exists(name)) 
{ 
    throw new Exception("File does not exist!"); 
} 

我只是想知道都有哪些不同的是,为什么一个是在另一个之上使用

回答

4

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

MSDN描述得好:

当你不得不抛出一个异常,你可以经常在.NET Framework使用现有的异常类型,而不是实现自定义异常。你应该这两种情况下,使用一个标准的异常类型:

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

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

TLDR:ArgumentException是用来提供更详细的信息

0

对象的类型的Exception是万物的根源。

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

有许多异常的子类型。 SystemException就是其中之一。

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

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

如果你的教授真的想用它们可以写

if (name==null) throw new ArgumentNullException("name"); 
if (name=="") throw new ArgumentOutOfRangeException("name", name, "name cannot be zero length"); 
最明确的例外
相关问题