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?
Odpowiedzi:
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;
}
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.