オープンジェネリック型(ジェネリック型定義)の型情報では、Type.MakeGenericTypeメソッドを使用することでクローズジェネリック型(構築ジェネリック型)を取得することができます。 言い換えると、MakeGenericTypeメソッドによってジェネリック型定義から構築ジェネリック型を構築することができます。
MakeGenericTypeメソッドの引数に型引数にしたい型の型情報(Type
)を指定することで、対応するクローズジェネリック型の型情報を取得できます。 例えばDictionary<,>
の型情報からDictionary<string, int>
の型情報を取得したい場合は次のようにします。
オープンジェネリック型からクローズジェネリック型の型情報を取得する
using System;
using System.Collections.Generic;
class Sample {
static void Main()
{
var t1 = typeof(Dictionary<,>); // オープンジェネリック型
Console.WriteLine(t1);
// Dictionary<,>からDictionary<string, int>の型情報を作成する
var t2 = t1.MakeGenericType(typeof(string), typeof(int));
Console.WriteLine(t2);
}
}
実行結果
System.Collections.Generic.Dictionary`2[TKey,TValue] System.Collections.Generic.Dictionary`2[System.String,System.Int32]