TypeがC#でnull可能な列挙型かどうかを確認する方法
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が必要ですか?ブールする
public static bool IsNullable(this Type type)
{
return type.IsClass
|| (type.IsGeneric && type.GetGenericTypeDefinition == typeof(Nullable<>));
}
IsEnum
チェックは省略しました。これにより、この方法がより一般的になります。