ArgumentException和Just Exception有什么区别

本文关键字:什么 区别 Exception Just ArgumentException | 更新日期: 2024-10-31 23:30:29

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

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

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

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

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

ArgumentException和Just Exception有什么区别

Exception

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

MSDN很好地描述了它:

当必须引发异常时,通常可以在 .NET Framework 中使用现有的异常类型,而不是实现自定义异常。在以下两种情况下,应使用标准异常类型:

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

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

TLDR:ArgumentException是一种用于提供更详细信息的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");