型パラメータの宣言されている型(またはメソッド)を参照する場合は次のプロパティによって取得することができます。 ジェネリック型の型パラメータを表すTypeではDeclaringTypeプロパティ、ジェネリックメソッドの型パラメータを表すTypeではDeclaringMethodプロパティを参照することにより、宣言されている型を取得できます。
型パラメータが宣言されている型あるいはメソッドを取得する
using System;
using System.Collections.Generic;
using System.Reflection;
class C {
public void M<TArg1, TArg2>(TArg1 arg1, TArg2 arg2)
{
}
}
class Sample {
static void Main()
{
// ジェネリック型List<T>の型パラメータTの型情報を取得する
var arg1 = typeof(List<>).GetGenericArguments()[0];
// 型パラメータが宣言されている型を表示する
Console.WriteLine("{0} -> {1}", arg1, arg1.DeclaringType);
// ジェネリックメソッドC.M<T>の型パラメータTの型情報を取得する
var arg2 = typeof(C).GetMethod("M").GetGenericArguments()[0];
// 型パラメータが宣言されているメソッドを表示する
Console.WriteLine("{0} -> {1}", arg2, arg2.DeclaringMethod);
}
}
実行結果
T -> System.Collections.Generic.List`1[T] TArg1 -> Void M[TArg1,TArg2](TArg1, TArg2)