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?