Puis-je effectuer un cast d'un type générique à un enum en C#?

Je suis en train d'écrire une fonction d'utilité qui obtient un nombre entier à partir de la base de données et renvoie un typée enum pour l'application.

Voici ce que j'ai essayé de faire (remarque je passe dans un lecteur de données et le nom de la colonne à la place de la int dans ma vraie fonction):

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;
}

Mais il ne me laisse pas coulé (T)value disant:

Ne peut pas convertir le type de Système.Enum' à 'T'.

Aussi j'ai lu pas mal de critiques mitigées sur l'utilisation de Enum.IsDefined. Performance sage, il semble très pauvres. Sinon, comment puis-je garantir une valeur valide?

  • Notez que si l'affaire avait été inverse, dire, vous avez à faire (Enum)value et vous obtenez Cannot convert type 'T' to 'System.Enum', vous pouvez simplement faire un as cast, comme value as Enum.
  • Pas vrai (au moins dans mon cas), vous obtenez le vieux " L'opérateur doit être utilisé avec une référence ou type nullable ('Foo.bar " est un non nullable valeur type) erreur.
InformationsquelleAutor Justin | 2010-07-15