Qual é a exceção correta para lançar valores de enumeração não manipulados?

Este é outro caso do meuoutra pergunta sobre casos não tratados com enums que eu era recomendado para fazer uma pergunta separada.

Digamos que temosSomeEnum e ter uma instrução switch manipulando-a como:

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());    
  }
}

Como você vê, lidamos com todos os possíveis valores de enumeração, mas ainda mantemos um padrão lançando uma exceção no caso de um novo membro ser adicionado e queremos ter certeza de que estamos cientes da manipulação que está faltando.

Minha pergunta é: qual é a exceção correta em tais circunstâncias em que você deseja notificar que o caminho do código fornecido não foi manipulado / implementado ou nunca deveria ter sido visitado? Nós costumávamos usarNotImplementedException mas não parece ser o ajuste certo. Nosso próximo candidato éInvalidOperationException mas o termo não parece certo. Qual é o certo e por quê?

questionAnswers(10)

yourAnswerToTheQuestion