检查Type实例是否是C#中可为空的枚举

时间:2010-04-27 16:33:07

标签: c# enums nullable

如何在C#中检查Type是否为可空的枚举

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

5 个答案:

答案 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)