Какое правильное исключение выдается для необработанных значений перечисления?

Это еще один случай моегодругой вопрос о необработанных случаях с перечислениями который мне порекомендовали задать как отдельный вопрос.

Скажем у насSomeEnum и иметь оператор switch, обрабатывающий его так:

enum SomeEnum
{
  One,
  Two
}

void someFunc()
{
  SomeEnum value = someOtherFunc();
  switch(value)
  {
     case One:
       ... break;
     case Two:
       ... break;
     default:
         throw new ??????Exception("Unhandled value: " + value.ToString());    
  }
}

Как вы видите, мы обрабатываем все возможные значения перечисления, но по-прежнему сохраняем значение по умолчанию, генерирующее исключение в случае добавления нового члена, и мы хотим убедиться, что знаем о пропущенной обработке.

Мой вопрос: что является правильным исключением в тех случаях, когда вы хотите уведомить, что данный путь к коду не обработан / не реализован или никогда не должен был посещаться? Мы привыкли использоватьNotImplementedException но это, кажется, не подходит. Наш следующий кандидатInvalidOperationException но термин не звучит правильно. Что правильно и почему?