Actualmente estoy escribiendo un código para UnconstrainedMelody que tiene métodos genéricos relacionados con enumeraciones.
Ahora, tengo una clase estática con un montón de métodos que solo deben usarse con enumeraciones "flags". No puedo agregar esto como una restricción ... por lo que es posible que también se llamen con otros tipos de enumeración. En ese caso, me gustaría lanzar una excepción, pero no estoy seguro de cuál lanzar.
Solo para hacer esto concreto, si tengo algo como esto:
// 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
}
¿Cuál es la mejor excepción para lanzar? ArgumentException
suena lógico, pero es un argumento de tipo en lugar de un argumento normal, que podría confundir fácilmente las cosas. ¿Debo presentar mi propia TypeArgumentException
clase? Uso InvalidOperationException
? NotSupportedException
? ¿Algo más?
Yo más bien no crear mi propia excepción para esto a menos que sea claramente lo que hay que hacer.