Typeにやたら沢山あるGeneric系メンバってナンジャラホイ。
このサンプルが一番わかりやすい。
Type.ContainsGenericParameters プロパティ (System)
public class Base<T, U> { } public class Derived<V> : Base<int, V> { } public class Test { public static void Main() { Type derivedType = typeof(Derived<>); DisplayGenericTypeInfo(derivedType); DisplayGenericTypeInfo(derivedType.BaseType); } private static void DisplayGenericTypeInfo(Type t) { Console.WriteLine("\tIs this a generic type definition? {0}", t.IsGenericTypeDefinition); Console.WriteLine("\tIs it a generic type? {0}", t.IsGenericType); Console.WriteLine("\tDoes it have unassigned generic parameters? {0}", t.ContainsGenericParameters); if (t.IsGenericType) { Type[] typeArguments = t.GetGenericArguments(); Console.WriteLine("\tList type arguments ({0}):", typeArguments.Length); foreach (Type tParam in typeArguments) { // IsGenericParameter is true only for generic type // parameters. // if (tParam.IsGenericParameter) { Console.WriteLine( "\t\t{0} (unassigned - parameter position {1})", tParam, tParam.GenericParameterPosition); } else { Console.WriteLine("\t\t{0}", tParam); } } } } } /* This example produces the following output: --- Display a generic type and the open constructed type from which it is derived. Derived`1[V] Is this a generic type definition? True Is it a generic type? True Does it have unassigned generic parameters? True List type arguments (1): V (unassigned - parameter position 0) Base`2[System.Int32,V] Is this a generic type definition? False Is it a generic type? True Does it have unassigned generic parameters? True List type arguments (2): System.Int32 V (unassigned - parameter position 0) */
ここから、
- IsGenericType
- TypeがGenericであるか*1
- IsGenericTypeDefinition
- Typeが Class<T>などの不確定型を持つ定義になっているか*2
- ContainsGenericParameters
- Typeが Class<T>などの不確定型のパラメータを持つか
- IsGenericParameter
- Class<T>のTのような不確定型パラメータか
という感じっぽい。
*1:class of classの形になっているか