IsGenericType
あなたが与えた例のためにあなたが望むことをします:
using System;
using System.Collections.Generic;
using System.Reflection;
public class Test
{
static void Main()
{
ShowType(typeof(int));
ShowType(typeof(int?));
ShowType(typeof(List<string>));
}
static void ShowType(Type type)
{
Console.WriteLine("{0} / {1}", type.IsGenericType, type.IsValueType);
}
}
違いは、を使用IsConstructedGenericType
するとfalseが返されるのtypeof(List<>)
に対し、を使用するIsGenericType
とtrueが返されることです。Type.ContainsGenericParameters
.NET 2+でそれらを区別するために使用できます...それでも十分ではありませんが、病理学的な場合:
class Foo<T> : Dictionary<T, string> {}
考えてみてくださいtypeof(Foo<>).BaseType
:
IsConstructedGenericType
:True(割り当てられたタイプパラメーターが1つ含まれています)
IsGenericType
:真
ContainsGenericParameters
:True(まだ割り当てられていない型パラメーターが1つ含まれています)
うまくいけば、これはあなたにとって問題にならないでしょう。