80 votes

Vérifier si l'instance de type est une énumération nullable en C #

Comment puis-je vérifier si un Type est une énumération nullable en C # quelque chose comme

 Type t = GetMyType();
bool isEnum = t.IsEnum; //Type member
bool isNullableEnum = t.IsNullableEnum(); How to implement this extension method?
 

163voto

LukeH Points 110965
public static bool IsNullableEnum(this Type t)
{
    Type u = Nullable.GetUnderlyingType(t);
    return (u != null) && u.IsEnum;
}

42voto

Jon Skeet Points 692016

EDIT: Je vais laisser cette réponse en suspens car elle fonctionnera, et cela montre quelques appels que les lecteurs pourraient ignorer autrement. Cependant, la réponse de Luke est définitivement plus agréable - faites-le vôtre :)

Tu peux faire:

 public static bool IsNullableEnum(this Type t)
{
    return t.IsGenericType &&
           t.GetGenericTypeDefinition() == typeof(Nullable<>) &&
           t.GetGenericArguments()[0].IsEnum;
}
 

1voto

Daniel Renshaw Points 12272

1voto

Bryan Watts Points 22810
 public static bool IsNullable(this Type type)
{
    return type.IsClass
        || (type.IsGeneric && type.GetGenericTypeDefinition == typeof(Nullable<>));
}
 

J'ai omis le contrôle IsEnum vous avez déjà effectué, car cela rend cette méthode plus générale.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X