Dank this Frage gelang es mir herauszufinden, wie ich meine generische Methode beschränken kann, nur Enums zu akzeptieren.Wie erhält man den Datenwert einer Enumeration in einer generischen Methode?
Jetzt versuche ich eine generische Methode zu erstellen, so dass ich eine Dropdown-Liste an eine beliebige Enum binden kann, die Beschreibung in der Dropdown-Liste mit dem Wert numerischen Wert der anzeigen Aufzählungswert.
public static object EnumToDataSource<T>() where T : struct, IConvertible {
if (!typeof(T).IsEnum) // just to be safe
throw new Exception(string.Format("Type {0} is not an enumeration.", typeof(T)));
var q = Enum.GetValues(typeof(T)).Cast<T>()
.Select(x => new { ID = DataUtil.ToByte(x), Description = x.ToString() }) // ToByte() is my own method for safely converting a value without throwing exceptions
.OrderBy(x => x.Description);
return q;
}
Sieht gut aus, aber ToByte() gibt immer 0, auch wenn meine Aufzählung hat Werte explizit festgelegt, etwa so:
public enum TStatus : byte {
Active = 1,
Inactive = 0,
}
Außerhalb der generischen Methode, wenn ich einen Wert vom Typ gegossen TStatus
zu byte
funktioniert es perfekt. Innerhalb der generischen Methode, wenn ich versuche, etwas vom Typ T
zu byte
zu werfen, erhalte ich einen Compilerfehler. Ich kann auch nichts in der statischen Schnittstelle von Enum finden, um dies zu tun.
Also, wie bekomme ich den numerischen Wert der Enumeration innerhalb der generischen? (Ich werde auch jeden anderen Rat zur Optimierung meines Codes dankbar akzeptieren ...)
Bearbeiten: Ähm, äh ... stellt sich heraus, dass die Sache nicht funktionierte ... weil es einen Fehler gab meine ToByte() Methode ... (erröten). Naja, danke trotzdem - davon habe ich viel gelernt!
Entweder Convert.ToByte() oder Enum.Parse (typeof (T), tVal.ToString()) sollte gut funktionieren. – LBushkin