В настоящее время я пишу код для UnconstrainedMelody, который имеет общие методы, связанные с перечислениями.
Теперь у меня есть статический класс с кучей методов, которые предназначены только для использования с перечислениями «флагов». Я не могу добавить это как ограничение ... поэтому возможно, что они будут вызываться и с другими типами перечислений. В этом случае я хотел бы создать исключение, но я не уверен, какое именно.
Просто чтобы конкретизировать, если у меня есть что-то вроде этого:
// 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
? Что-нибудь еще?
Я бы предпочел не создавать свое собственное исключение для этого, если это явно не правильно.