Как проверить, является ли Type перечислением с нулевым значением в C #, например
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;
}
РЕДАКТИРОВАТЬ: я собираюсь оставить этот ответ, поскольку он будет работать, и он демонстрирует несколько вызовов, о которых читатели могут не знать иначе. Тем не менее, ответ Люка определенно лучше - проголосуйте за него :)
Ты можешь сделать:
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? болтать
источник
public static bool IsNullable(this Type type) { return type.IsClass || (type.IsGeneric && type.GetGenericTypeDefinition == typeof(Nullable<>)); }
Я не учел
IsEnum
проверку, которую вы уже сделали, поскольку это делает этот метод более общим.источник
См. Http://msdn.microsoft.com/en-us/library/ms366789.aspx
источник