Jaki jest prawidłowy wyjątek do odrzucenia nieobsługiwanych wartości wyliczeniowych?

To kolejny przypadek mojejinne pytanie o nieobsługiwane przypadki z wyliczeniami którym polecono mi zadać osobne pytanie.

Powiedzmy, że mamySomeEnum i mieć instrukcję switch obsługującą to jak:

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

Jak widzisz, zajmujemy się wszystkimi możliwymi wartościami wyliczenia, ale nadal zachowujemy domyślne rzucanie wyjątku w przypadku dodania nowego członka i chcemy się upewnić, że jesteśmy świadomi brakującej obsługi.

Moje pytanie brzmi: jaki jest odpowiedni wyjątek w takich okolicznościach, w których chcesz powiadomić, że dana ścieżka kodu nie jest obsługiwana / implementowana lub nigdy nie powinna była być odwiedzana? Kiedyś używaliśmyNotImplementedException ale to nie wydaje się być odpowiednie. Nasz następny kandydat toInvalidOperationException ale termin nie brzmi dobrze. Jaki jest właściwy i dlaczego?

questionAnswers(10)

yourAnswerToTheQuestion