Я зараз пишу код для 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? Щось іще?
Я б краще не створив для цього власного винятку, якщо явно це не правильно.