Я умеренный поклонник использования подтипов Exception, чтобы описать проблему, вызвавшую исключение. Например, предположим, что я пишу метод, который не позволяет значениям int больше 100 передаваться в качестве аргументов. Я часто начинаю метод с условием защиты от этого и выбрасываю исключение, если оно происходит. Я, вероятно, выброшу исключение System.Argument (с соответствующим сообщением, внутренним исключением и данными), чтобы указать это.
Прямо сейчас у меня есть класс, который имеет два свойства. Чтобы объект считался «допустимым», ровно одно из этих свойств должно иметь ненулевое значение, а другое - нулевое. У меня случается случай с ошибкой, когда это не так, и я хочу вызвать исключение при обнаружении.
Мой вопрос: какой лучший подкласс исключений использовать в этом случае? Я не вижу (недопустимый) подкласс StateException. ApplicationException - очевидный запасной вариант, но он очень общий, и поэтому я надеюсь на что-то лучшее.
В данный момент меня особенно интересуют подклассы .NET Exception, но, поскольку эта проблема касается нескольких языков, я не считаю обсуждения других языковых решений слишком не по теме. Например: Java имеет IllegalStateException , которая, кажется, прекрасно описывает мои потребности. Я также одобрил аналогичный вопрос для Ruby .