2010-04-27 10 views

Répondre

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

EDIT: Je vais laisser cette réponse comme il sera travail, et il démontre quelques appels que les lecteurs peuvent ne pas connaître autrement. Cependant, Luke's answer est certainement plus agréable - aller upvote it :)

Vous pouvez faire:

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

Je pense que je l'aurais fait à la manière de Luke; moins complexe pour l'appelant. –

+1

@Marc: Je ne vois pas en quoi cela fait de la chance pour le * visiteur * - mais le chemin de Luc est certainement plus agréable que le mien. –

+0

Ouais définitivement le garder pour référence future – adrin

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

J'ai quitté le IsEnum vérifier que vous avez déjà fait, car cela rend cette méthode plus générale.

5

A partir de C# 6.0 la réponse acceptée peut être refactorisé comme

Nullable.GetUnderlyingType(t)?.IsEnum == true 

Le == true est nécessaire pour convertir bool? Bool