应用程序异常或创建自定义异常?

8

当调用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 来创建自己的自定义异常?

4个回答

8

也许可以阅读文档

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

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


感谢您提醒关于ApplicationException的问题。ArgumentOutOfRangeException听起来很合适:它是“在调用方法定义的可允许值范围之外时,抛出的参数值超出范围的异常”。 - Dave New
这个答案还引用了ApplicationException的文档,并提供了类似(且更新的)指导。 - DavidRR

3

假设这取决于你如何处理异常。抛出特定的异常可以让你对它们进行专门的响应。例如:

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

在客户端代码中,会有一些检查,比如IsFileSizeExceeded(),因此我不需要处理特定的异常来向用户发送反馈。我只需要记录它们即可。 - Dave New

3
我将使用分别使用ArgumentExceptionInvalidOperationException

1

你目前的代码还可以,但我个人会抛出一个带有详细信息的System.ArgumentException异常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接