Atualmente estou escrevendo algum código para UnconstrainedMelody que tem métodos genéricos para fazer com enums.
Agora, eu tenho uma classe estática com um monte de métodos que são unicamente destinadas a ser usado com "bandeiras" enums. Eu não posso adicionar isso como uma restrição ... então é possível que eles sejam chamados com outros tipos de enum também. Nesse caso, gostaria de lançar uma exceção, mas não tenho certeza de qual lançar.
Só para tornar isso concreto, se eu tiver algo assim:
// 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
}
Qual é a melhor exceção para lançar? ArgumentException
parece lógico, mas é um argumento de tipo em vez de um argumento normal, o que poderia facilmente confundir as coisas. Devo apresentar minha própria TypeArgumentException
classe? Use InvalidOperationException
? NotSupportedException
? Algo mais?
Eu sim não criar meu próprio exceção para isso a menos que seja claramente a coisa certa a fazer.