Checking if Type instance is a nullable enum in C#
How do i check if a Type is a nullable enum in C# something like
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;
}
EDIT: I'm going to leave this answer up as it will work, and it demonstrates a few calls that readers may not otherwise know about. However, Luke's answer is definitely nicer - go upvote it :)
You can do:
public static bool IsNullableEnum(this Type t)
{
return t.IsGenericType &&
t.GetGenericTypeDefinition() == typeof(Nullable<>) &&
t.GetGenericArguments()[0].IsEnum;
}
As from C# 6.0 the accepted answer can be refactored as
Nullable.GetUnderlyingType(t)?.IsEnum == true
The == true is needed to convert bool? to bool
public static bool IsNullable(this Type type)
{
return type.IsClass
|| (type.IsGeneric && type.GetGenericTypeDefinition == typeof(Nullable<>));
}
I left out the IsEnum
check you already made, as that makes this method more general.
See http://msdn.microsoft.com/en-us/library/ms366789.aspx
精彩评论