【问题标题】:What is the difference between ArgumentException and just Exception?ArgumentException 和 just Exception 有什么区别?
【发布时间】:2016-04-22 00:40:24
【问题描述】:

在我们教授的示例代码中,他有一个如下所示的 sn-p:

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

还有一个看起来像这样的sn-p:

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

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

【问题讨论】:

    标签: c# argumentexception


    【解决方案1】:

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

    MSDN 描述的很好:

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

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

    【讨论】:

      【解决方案2】:

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

      TLDR:ArgumentExceptionException 的一种类型,用于提供更详细的信息

      【讨论】:

        【解决方案3】:

        对象是万物之根。

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

        异常有很多子类型。 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");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-04
          相关资源
          最近更新 更多