In my file repository, I will throw the following exceptions when the InsertFile()
method is called:
At the moment I am just throwing an ApplicationException
with the relevant message:
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.");
}
// ...
}
Questions:
Are there better exception classes that I should be using here?
Or should I be creating my own custom exceptions by deriving from ApplicationException
?
You should only implement a custom exception if it provides a benefit compared to Java's standard exceptions. The class name of your exception should end with Exception. If an API method specifies an exception, the exception class becomes part of the API, and you need to document it.
You should not throw an ApplicationException exception in your code, and you should not catch an ApplicationException exception unless you intend to re-throw the original exception.
The big advantage is that it allows you to throw and exceptions that mean what you want them to mean. If you reuse an existing exception, any piece of your code that catches the exception has to deal with possibility that the actual exception wasn't thrown by your code, but by some other library party code.
Maybe read the documentation:
If you are designing an application that needs to create its own exceptions, you are advised to derive custom exceptions from the
Exception
class. It was originally thought that custom exceptions should derive from theApplicationException
class; however in practice this has not been found to add significant value.
As to whether there are better exceptions to throw - some might consider throwing an ArgumentOutOfRangeException
if you don't want to define your own exception.
Suppose it depends on how you plan on handling exceptions. Throwing specific exceptions lets you respond to them, um, specifically. For instance:
try
{
}
catch(FileSizeExceededException ex)
{
}
catch(StorageCapacityExceededException ex)
{
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With