ApplicationException или создавать пользовательские исключения?
В моем репозитории файлов я выведу следующие исключения, когда вызывается метод 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
?
Ответы
Ответ 1
Возможно, прочитайте документация:
Если вы разрабатываете приложение, которое должно создавать свои собственные исключения, рекомендуется получать пользовательские исключения из класса Exception
, Первоначально предполагалось, что пользовательские исключения должны выводиться из класса ApplicationException
; однако на практике это не нашло значительного значения.
Что касается лучших исключений для броска - некоторые могут подумать о том, чтобы бросить ArgumentOutOfRangeException
, если вы не хотите определять свои собственное исключение.
Ответ 2
Предположим, это зависит от того, как вы планируете обрабатывать исключения. Выброс определенных исключений позволяет вам ответить на них, гм, в частности. Например:
try
{
}
catch(FileSizeExceededException ex)
{
}
catch(StorageCapacityExceededException ex)
{
}
Ответ 3
Я бы использовал ArgumentException
и InvalidOperationException
, соответственно.
Ответ 4
Хорошо, что у вас есть, все в порядке, но я лично брошу System.ArgumentException
(с подробным сообщением).