ApplicationException还是创建自定义exception?

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

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

目前我只是抛出一个带有相关消息的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."); } // ... } 

问题:

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

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

也许阅读文档 :

如果您正在设计需要创建自己的exception的应用程序,建议您从Exception类派生自定义exception。 最初认为自定义exception应该来自ApplicationException类; 然而,在实践中,尚未发现这增加了重要价值。

至于是否有更好的抛出exception – 如果你不想定义自己的exception,有些人可能会考虑抛出ArgumentOutOfRangeException

假设它取决于您计划如何处理exception。 抛出特定的exception可以让你回答它们,特别是。 例如:

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

我会分别使用ArgumentExceptionInvalidOperationException

那么你到目前为止还没有,但我个人会抛出一个System.ArgumentException (带有详细消息)。