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 (с подробным сообщением).