Jak sprawdzić, czy Type jest wyliczeniem dopuszczającym wartość null w C # czymś takim jak
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;
}
EDYCJA: Zostawię tę odpowiedź, ponieważ zadziała i pokazuje kilka wezwań, o których czytelnicy mogliby nie wiedzieć. Jednak odpowiedź Łukasza jest zdecydowanie ładniejsza - zagłosuj za nią :)
Możesz to zrobić:
public static bool IsNullableEnum(this Type t)
{
return t.IsGenericType &&
t.GetGenericTypeDefinition() == typeof(Nullable<>) &&
t.GetGenericArguments()[0].IsEnum;
}
Począwszy od C # 6,0 zaakceptowaną odpowiedź można refaktoryzować jako
Nullable.GetUnderlyingType(t)?.IsEnum == true
== true jest potrzebne do konwersji bool? to bool
źródło
public static bool IsNullable(this Type type) { return type.IsClass || (type.IsGeneric && type.GetGenericTypeDefinition == typeof(Nullable<>)); }
Pominąłem
IsEnum
sprawdzenie, które już zrobiłeś, ponieważ dzięki temu ta metoda jest bardziej ogólna.źródło
Zobacz http://msdn.microsoft.com/en-us/library/ms366789.aspx
źródło