¿Cuál es la excepción correcta para lanzar los valores de enumeración no manejados?

Este es otro caso de miotra pregunta sobre casos no manejados con enumeraciones que me recomendaron hacer como una pregunta aparte.

Digamos que tenemosSomeEnum y tener una instrucción de cambio manejándolo 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 puede ver, manejamos todos los valores de enumeración posibles, pero aún así mantenemos una excepción de lanzamiento predeterminada en caso de que se agregue un nuevo miembro y queremos asegurarnos de que estamos al tanto del manejo faltante.

Mi pregunta es: ¿cuál es la excepción correcta en tales circunstancias en las que desea notificar que la ruta del código dado no se maneja / implementa o que nunca debería haber sido visitada? Solíamos usarNotImplementedException pero no parece ser el ajuste correcto. Nuestro próximo candidato esInvalidOperationException pero el término no suena bien. ¿Cuál es el correcto y por qué?

Respuestas a la pregunta(10)

Su respuesta a la pregunta