Проверка того, является ли экземпляр экземпляра нумерованным перечислением в С#
Как проверить, является ли тип нулевым перечислением в С#
что-то вроде
Type t = GetMyType();
bool isEnum = t.IsEnum; //Type member
bool isNullableEnum = t.IsNullableEnum(); How to implement this extension method?
Ответ 1
public static bool IsNullableEnum(this Type t)
{
Type u = Nullable.GetUnderlyingType(t);
return (u != null) && u.IsEnum;
}
Ответ 2
EDIT: я собираюсь оставить этот ответ, поскольку он будет работать, и он демонстрирует несколько вызовов, о которых читатели могут не знать. Тем не менее, Ответ Люка определенно лучше - пойдите вверх:)
Вы можете сделать:
public static bool IsNullableEnum(this Type t)
{
return t.IsGenericType &&
t.GetGenericTypeDefinition() == typeof(Nullable<>) &&
t.GetGenericArguments()[0].IsEnum;
}
Ответ 3
Как и в случае с С# 6.0, принятый ответ может быть реорганизован как
Nullable.GetUnderlyingType(t)?.IsEnum == true
Для преобразования bool требуется == true. to bool