Какое исключение я должен использовать, когда программа достигает логического состояния, которое я "знаю" не произойдет, и если это произойдет, что-то ужасно плохо.
Например:
int SomeFunction(int arg) {
SomeEnum x = Whatever(arg, somePrivateMember);
switch (x) {
case SomeEnum.Value1:
return SomeFunction1();
case SomeEnum.Value1:
return SomeFunction2();
default:
throw new WhatTypeToThrow();
}
}
Ясно, что ArgumentException является длинным, потому что неверное значение для x могло возникнуть из-за ошибки в Whatever() или недопустимой комбинации любых аргументов и/или текущего состояния экземпляра.
Я ищу что-то вроде InvalidProgramStateException, InternalErrorException или аналогичного.
Конечно, я мог бы определить свою собственную, но мне интересно, есть ли подходящее исключение в рамках.
Изменить: Удален простой пример кода, чтобы уменьшить количество ответов ArgumentException.