Проверка, является ли экземпляр типа nullable enum в C#



Как проверить, является ли тип nullable enum в C#
что-то вроде



Type t = GetMyType();
bool isEnum = t.IsEnum; //Type member
bool isNullableEnum = t.IsNullableEnum(); How to implement this extension method?
722   5  

5 ответов:

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

EDIT: я собираюсь оставить этот ответ, поскольку он будет работать, и он демонстрирует несколько вызовов, о которых читатели могут не знать. Однако,Луки определенно лучше-идите вверх:)

вы можете сделать:

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 необходимо для преобразования bool? в bool

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

Я IsEnum проверьте, что вы уже сделали, так как это делает этот метод более общим.

Comments

    Ничего не найдено.