如何在C#中检查Type是否为可空的枚举
之类的东西Type t = GetMyType();
bool isEnum = t.IsEnum; //Type member
bool isNullableEnum = t.IsNullableEnum(); How to implement this extension method?
答案 0 :(得分:151)
public static bool IsNullableEnum(this Type t)
{
Type u = Nullable.GetUnderlyingType(t);
return (u != null) && u.IsEnum;
}
答案 1 :(得分:41)
编辑:我将把这个答案留下来,因为它会起作用,它会演示一些读者可能不知道的电话。但是,Luke's answer肯定更好 - 去投票吧:)。
你可以这样做:
public static bool IsNullableEnum(this Type t)
{
return t.IsGenericType &&
t.GetGenericTypeDefinition() == typeof(Nullable<>) &&
t.GetGenericArguments()[0].IsEnum;
}
答案 2 :(得分:9)
从C#6.0开始,接受的答案可以重构为
Nullable.GetUnderlyingType(t)?.IsEnum == true
转换bool需要== true吗? bool
答案 3 :(得分:1)
public static bool IsNullable(this Type type)
{
return type.IsClass
|| (type.IsGeneric && type.GetGenericTypeDefinition == typeof(Nullable<>));
}
我遗漏了你已经做过的IsEnum
检查,因为这使得这种方法更加通用。
答案 4 :(得分:1)