この問題は、この質問に答えようとしたときに発生しました。
https://stackoverflow.com/questions/12434634
プロパティのドキュメントには次のように記載されていType.IsEnum
ます。
現在のTypeがジェネリック型またはジェネリックメソッドの定義の型パラメーターを表す場合、このプロパティは常にfalseを返します。
しかし、私はこの振る舞いを見ていません。 typeof(T).IsEnum
を返してtrue
います。なんで?ドキュメントを誤解していますか?
サンプルコード:
using System;
static class Program
{
public static void Test<TEnum>() where TEnum : struct
{
Console.WriteLine(typeof(TEnum).IsEnum);
}
public static void Test<TEnum>(this string text) where TEnum : struct
{
if (!typeof(TEnum).IsEnum)
{
Console.WriteLine("Not an enum");
return;
}
Console.WriteLine("Is an enum");
}
public enum Test1
{
Value1,
Value2,
}
public enum Test2 : byte
{
Value3,
Value4,
}
static void Main(string[] args)
{
Test<Test1>();
Test<Test2>();
"".Test<Test1>();
"".Test<Test2>();
}
}
私が得る結果は次のとおりです。
TrueTrue は列挙型
です 列挙型です
プロパティのドキュメントをType.IsEnum
読んだ後、結果は次のようになると思います。
FalseFalse
列挙型 ではない
列挙型ではない