Распространено заблуждение, что значения перечисления .Net ограничены значениями, объявленными в Enum.В действительности они могут иметь любое значение в диапазоне базового типа перечисления (int
по умолчанию).Например, следующее абсолютно законно
MyMethod((MyEnum)42);
Этот код будет скомпилирован без предупреждений и не попадет ни на одну из ваших case
меток.
Теперь решение о том, будет ли ваш код обрабатывать сценарии такого типа, является политическим решением.Это не необходимо , но я бы определенно рекомендовал иметь его.Я предпочитаю добавлять default
к каждому switch
в enum, который я пишу специально для этого сценария со следующим шаблоном
switch (value) {
...
default:
Debug.Fail(String.Format("Illegal enum value {0}", value));
FailFast(); // Evil value, fail quickly
}