在C#中检查Type实例是否为空值枚举

我如何检查types是否是C#中可为null的枚举类似

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

编辑:我要离开这个答案,因为它会工作,它演示了读者可能不知道的几个电话。 然而, 卢克的答案肯定是更好的 – 去upvote它:)

你可以做:

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

从C#6.0开始,接受的答案可以被重构为

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

== true是需要转换布尔? 布尔

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

我遗漏了你已经做的IsEnum检查,因为这使得这个方法更通用。