リフレクションでこれを行うには、オープン型からクローズ ジェネリック型を構築する必要があります。次に、リフレクションでそのために持っているオプションの1つでそれを構築します。Activator.CreateInstance はそのためにうまく機能します。
IList GetListOfListsOfTypes(Type[] types)
{
IList<IList> listOfLists = new List<IList>();
foreach (Type t in types)
{
Type requestedTypeDefinition = typeof(List<>);
Type genericType = requestedTypeDefinition.MakeGenericType(t);
IList newList = (IList)Activator.CreateInstance(genericType);
listOfLists.Add(newList);
}
return listOfLists;
}
このメソッドから非ジェネリック s のリストを返すことに注意してくださいIList
。これは、コンパイル時に型がわからないため必要です。そのため、新しいジェネリック リストを使用するには、おそらくリフレクションを再度使用する必要があります。 . それが価値があるかどうかを検討してください - もちろん、それはあなたの要件に依存します.