Ich schreibe gerade Code für UnconstrainedMelody, der generische Methoden für Aufzählungen enthält.
Jetzt habe ich eine statische Klasse mit einer Reihe von Methoden, die nur für "Flags" -Aufzählungen verwendet werden sollen. Ich kann dies nicht als Einschränkung hinzufügen ... daher ist es möglich, dass sie auch mit anderen Aufzählungstypen aufgerufen werden. In diesem Fall würde ich gerne eine Ausnahme auslösen, bin mir aber nicht sicher, welche ich auslösen soll.
Nur um dies konkret zu machen, wenn ich so etwas habe:
// 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
}
Was ist die beste Ausnahme zu werfen? ArgumentException
klingt logisch, aber es ist eine Art eher Argument als ein normales Argument, das könnte leicht verwirren Dinge. Soll ich meine eigene TypeArgumentException
Klasse vorstellen ? Verwenden InvalidOperationException
? NotSupportedException
? Noch etwas?
Ich würde lieber keine eigene Ausnahme dafür erstellen, es sei denn, es ist eindeutig das Richtige.