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?
public static bool IsNullableEnum(this Type t)
{
Type u = Nullable.GetUnderlyingType(t);
return (u != null) && u.IsEnum;
}
EDIT: Je vais laisser cette réponse car elle fonctionnera, et elle démontre quelques appels que les lecteurs ne connaissent pas autrement. Cependant, la réponse de Luke est certainement plus agréable - allez-y voter :)
Tu peux faire:
public static bool IsNullableEnum(this Type t)
{
return t.IsGenericType &&
t.GetGenericTypeDefinition() == typeof(Nullable<>) &&
t.GetGenericArguments()[0].IsEnum;
}
A partir de C # 6.0, la réponse acceptée peut être refactorisée comme
Nullable.GetUnderlyingType(t)?.IsEnum == true
Le == true est nécessaire pour convertir bool? bool
public static bool IsNullable(this Type type)
{
return type.IsClass
|| (type.IsGeneric && type.GetGenericTypeDefinition == typeof(Nullable<>));
}
J'ai omis la vérification de IsEnum
que vous avez déjà effectuée, car cela rend cette méthode plus générale.