Attualmente sto scrivendo del codice per UnconstrainedMelody che ha metodi generici a che fare con le enumerazioni.
Ora, ho una classe statica con un sacco di metodi che sono solo pensato per essere utilizzato con le enumerazioni "bandiere". Non posso aggiungerlo come vincolo ... quindi è possibile che vengano chiamati anche con altri tipi di enum. In tal caso, vorrei lanciare un'eccezione, ma non sono sicuro di quale lanciare.
Giusto per renderlo concreto, se ho qualcosa del genere:
// 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 è la migliore eccezione da lanciare? ArgumentException
sembra logico, ma è un argomento di tipo piuttosto che un normale argomento, che potrebbe facilmente confondere le cose. Devo presentare la mia TypeArgumentException
classe? Utilizzare InvalidOperationException
? NotSupportedException
? Qualunque altra cosa?
Vorrei piuttosto non creare il mio eccezione per questo meno che non sia chiaramente la cosa giusta da fare.