【问题标题】:ApplicationException or create custom exceptions?ApplicationException 或创建自定义异常?
【发布时间】:2023-03-04 04:32:01
【问题描述】:

在我的文件存储库中,当调用InsertFile() 方法时,我会抛出以下异常:

  • 超过上传文件大小限制时
  • 超过存储容量时

目前我只是抛出一个带有相关信息的ApplicationException

public void InsertFile(HttpPostedFile uploadedFile)
{
    if (uploadedFile.ContentLength > FileSizeLimit)
    {
        throw new ApplicationException("File size limit exceeded.");
    }

    if (uploadedFile.ContentLength + FileStorageUsage > FileStorageCapacity)
    {
        throw new ApplicationException("File storage capacity exceeded.");
    }

    // ...
}

问题:

我应该在这里使用更好的异常类吗?

或者我应该通过从ApplicationException 派生来创建自己的自定义异常吗?

【问题讨论】:

    标签: c# asp.net .net exception exception-handling


    【解决方案1】:

    也许阅读documentation

    如果您正在设计需要创建自己的异常的应用程序,建议您从Exception 类派生自定义异常。最初认为自定义异常应该源自ApplicationException 类;然而,在实践中,这并没有增加显着的价值。

    至于是否有更好的异常可以抛出 - 如果您不想定义自己的异常,有些人可能会考虑抛出 ArgumentOutOfRangeException

    【讨论】:

    • 感谢ApplicationException 的提醒。 ArgumentOutOfRangeException 听起来很合适:“当参数的值超出被调用方法定义的允许值范围时引发的异常。”
    • This answer 还引用了ApplicationException 的文档并提供了类似(和更新)的指导。
    【解决方案2】:

    我会分别使用ArgumentExceptionInvalidOperationException

    【讨论】:

      【解决方案3】:

      假设这取决于您计划如何处理异常。抛出特定的异常可以让你响应它们,嗯,特别。例如:

      try
      {
      }
      catch(FileSizeExceededException ex)
      {
      }
      catch(StorageCapacityExceededException ex)
      {
      }
      

      【讨论】:

      • 在客户端代码中,会有检查,比如IsFileSizeExceeded(),所以我不一定需要处理特定的异常来向用户发送反馈。我只需要记录它们。
      【解决方案4】:

      好吧,到目前为止,您还可以,但我会亲自发送System.ArgumentException(带有详细信息)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-08
        • 2015-05-26
        • 2011-04-26
        • 2019-02-28
        • 2023-04-01
        • 2017-06-04
        相关资源
        最近更新 更多