Il est courant de trouver parfois dans son code des méthodes génériques de ce type :

public void MyMethod<T>(T input) where T : class
{
    // votre classe ici
}

J’ai eu besoin pour un projet de faire une méthode générique qui prends en paramètre un type Enum. Il me semblait intéressant de faire quelque chose du genre :

public void MyMethod(T enumInput) where T : Enum
{
    // votre classe ici
}

Or il se trouve que ce n’est pas possible avec le framework .Net 4. Après quelques recherches sur le web je suis tombé sur cette proposition que j’ai adopté et que je vous livre. Il part du principe qu’un Enum implémente l’interface IConvertible . Par contre il faut s’assurer que l’on passe bien un Enum grâce à la méthode typeof.

Voici un exemple :

public void MyMethod(T enumInput) where T : struct, IConvertible
{
    if (!typeof(T).IsEnum)
        throw new ArgumentException("T doit être un type énumération");
}

Bon coding à tous.