В настоящее время я пишу код для UnconstrainedMelody, который имеет общие методы для перечисления.
Теперь у меня есть статический класс с кучей методов, которые предназначены только для использования с перечислениями "flags". Я не могу добавить это как ограничение... так что возможно, что они будут вызваны и с другими типами перечислений. В этом случае я хотел бы сделать исключение, но я не уверен, какой из них нужно бросить.
Просто чтобы сделать это конкретным, если у меня есть что-то вроде этого:
// Returns a value with all bits set by any values
public static T GetBitMask<T>() where T : struct, IEnumConstraint
{
if (!IsFlags<T>()) // This method doesn't throw
{
throw new ???
}
// Normal work here
}
Какое лучшее исключение для броска? ArgumentException
звучит логично, но это аргумент типа, а не обычный аргумент, который может легко путать вещи. Должен ли я представить свой собственный класс TypeArgumentException
? Использовать InvalidOperationException
? NotSupportedException
? Что-нибудь еще?
Я бы предпочел не создавать свое собственное исключение для этого, если это явно не то, что нужно делать.