C#でジェネリック型の型情報を取得する

C#にはジェネリックという便利な仕組みがあります。

<>で指定された型パラメータを使うことによって、1つのソースコードで様々な変数型に対して同じ処理行うことが可能になります。

参照:C#のジェネリックを使おう

 

このようなジェネリックを使ったクラスで、時にはどんな型で使われているか型の情報を知りたい場合があります。


TypeクラスのGetGenericArgumentsで取得

以下のようなジェネリックを使ったクラスを考えます。

T1とT2の2つの型がジェネリックで定義されています。

    public class Test<T1,T2>
    {
        public void TestMethod()
        {
        }
    }

 

TestMethod内でT1とT2がどのような型なのか知りたい場合は以下のような方法で情報を取得できます。

    public class Test<T1,T2>
    {
        public void TestMethod()
        {
            var type = GetType();
            var args = type.GetGenericArguments();

            // ジェネリックで指定されたT1,T2の型の名前を取得
            foreach (var genericType in args)
            {
                Console.WriteLine(genericType.Name);
            }
        }
    }

6行目で自身のTypeを取得しています。

7行目、TypeクラスのGetGenericArgumentsメソッドを呼び出せばジェネリックのTypeが配列で取得できます。