白猫のメモ帳

C#とかJavaとかJavaScriptとかHTMLとか機械学習とか。

ジェネリックなコレクションのインスタンスをリフレクションで生成する

個人的なメモ。

たとえば、List<string>のインスタンスをリフレクションで生成したい場合、

var type = typeof(List<string>);
var instance = Activator.CreateInstance(type);

ってなるのだけれど、
任意のTypeインスタンスがあって、これのジェネリックなコレクションが生成したい場合、

var type = typeof(string);
var genericType= typeof(List<T>); // typeからT型が取りたいんだけど取れない
var instance = Activator.CreateInstance(genericType);

なんとなくこんなふうにしたいんだけど、このTはどっからくるんじゃい?ってなるわけで。
そんなときにはこうする。

var type = typeof(string);
var genericType= typeof(List<>).MakeGenericType(type);
var instanct = Activator.CreateInstance(genericType);

めもめも。