Ich schreibe eine Dienstprogrammfunktion, die eine Ganzzahl aus der Datenbank abruft und eine typisierte Enumeration an die Anwendung zurückgibt. HierKann ich in C# von einem generischen Typ in eine Enumeration umwandeln?
ist, was ich versucht zu tun (man beachte ich in einem Datenlesegerät und Spaltennamen übergeben statt der int
in meine wirkliche Funktion):
public static T GetEnum<T>(int enumAsInt)
{
Type enumType = typeof(T);
Enum value = (Enum)Enum.ToObject(enumType, enumAsInt);
if (Enum.IsDefined(enumType, value) == false)
{
throw new NotSupportedException("Unable to convert value from database to the type: " + enumType.ToString());
}
return (T)value;
}
Aber es wird mich nicht (T)value
sagen werfen:
Der Typ 'System.Enum' kann nicht in 'T' konvertiert werden.
Auch ich habe eine ganze Reihe von gemischten Kritiken über die Verwendung von Enum.IsDefined
gelesen. Leistungsmäßig klingt es sehr schlecht. Wie kann ich sonst einen gültigen Wert garantieren?
Beachten Sie, dass, wenn der Fall gewesen anders herum, sagen Sie, Sie müssen tun '(Enum) v alue' und du bekommst 'Kann Typ 'T' nicht in 'System.Enum'umwandeln, du könntest einfach eine' As'-Darstellung machen, wie 'Wert als Enum'. – nawfal
Nicht wahr (zumindest in meinem Fall), Sie erhalten das alte 'Der as-Operator muss mit einem Referenz- oder NULL-Typ verwendet werden (' Foo.bar 'ist ein nicht nullbarer Wertetyp) Fehler. – keithl8041