Обновлено, чтобы сделать перечисление не аргументом метода...
Вопрос
Проблемы такого типа часто возникают при использовании перечислений в операторах переключения. В примере кода разработчик учел все страны, которые программа использует в данный момент, но если в перечисление Country добавляется другая страна, должно быть выдано исключение. Мой вопрос: какой тип исключения следует создавать?
enum Country
{
UnitedStates, Mexico,
}
public string GetCallingCode(Guid countryId){
var country = GetCountry(countryId);
switch (country)
{
case Country.UnitedStates:
return "1";
break;
case Country.Mexico:
return "52";
break;
default:
// What to throw here
break;
}
}
Я рассмотрел
NotImplemented, Исключение, которое выдается, когда запрошенный метод или операция не реализована.
NotSupported Существуют методы, которые не поддерживаются в базовом классе, при этом ожидается, что эти методы будут вместо этого быть реализовано в производных классах. Производный класс может реализовывать только подмножество методов базового класса и выдавать исключение NotSupportedException для неподдерживаемых методов.
Для сценариев, в которых иногда объект может выполнить запрошенную операцию, и состояние объекта определяет, может ли операция быть выполнена, см. InvalidOperationException.
InvalidOperation используется в случаях, когда сбой при вызове метода вызван причинами, отличными от недопустимых. аргументы.
Я предполагаю, что операция либо не реализована, либо недействительна. Какой из них мне следует использовать? Есть ли у кого-нибудь лучший вариант (я знаю, что выбрать свой всегда можно)
Обновлено, чтобы сделать перечисление не аргументом метода...
Вопрос
Проблемы такого типа часто возникают при использовании перечислений в операторах переключения. В примере кода разработчик учел все страны, которые программа использует в данный момент, но если в перечисление Country добавляется другая страна, должно быть выдано исключение. Мой вопрос: какой тип исключения следует создавать?
Пример кода:
[code]enum Country { UnitedStates, Mexico, }
public string GetCallingCode(Guid countryId){ var country = GetCountry(countryId); switch (country) { case Country.UnitedStates: return "1"; break; case Country.Mexico: return "52"; break; default: // What to throw here break; } } [/code]
Я рассмотрел
[list] [*]NotImplemented, Исключение, которое выдается, когда запрошенный метод или операция не реализована. [*]NotSupported Существуют методы, которые не поддерживаются в базовом классе, при этом ожидается, что эти методы будут вместо этого быть реализовано в производных классах. Производный класс может реализовывать только подмножество методов базового класса и выдавать исключение NotSupportedException для неподдерживаемых методов.
Для сценариев, в которых иногда объект может выполнить запрошенную операцию, и состояние объекта определяет, может ли операция быть выполнена, см. InvalidOperationException. [*]InvalidOperation используется в случаях, когда сбой при вызове метода вызван причинами, отличными от недопустимых. аргументы. [/list]
Я предполагаю, что операция либо не реализована, либо недействительна. Какой из них мне следует использовать? Есть ли у кого-нибудь лучший вариант (я знаю, что выбрать свой всегда можно)