リストを作成する必要がありますが、クラス名しか知りません
public void getList(string className)
{
IList lsPersons = (IList)Activator.CreateInstance(
typeof(List<>).MakeGenericType(Type.GetType(className))));
}
非常に多くの方法を試しましたが、何もうまくいきません。
リストを作成する必要がありますが、クラス名しか知りません
public void getList(string className)
{
IList lsPersons = (IList)Activator.CreateInstance(
typeof(List<>).MakeGenericType(Type.GetType(className))));
}
非常に多くの方法を試しましたが、何もうまくいきません。
一般的なリストを作成できますが、役に立ちません。generic が必要な場合は、必要な型に関する事前の知識をList<T>
どこかに組み込む必要があります。たとえば、次のようなことができます。
if(className == "Employee") // this is where your prior knowledge is playing role
{
IList<Employee> lsPersons = (IList<Employee>)Activator.CreateInstance(
typeof(List<Employee>).MakeGenericType(Type.GetType(className))));
}
また、次のような方法で任意のタイプの一般的なリストを作成できます。
public static class GenericListBuilder
{
public static object Build(Type type)
{
var obj = typeof(GenericListBuilder)
.GetMethod("MakeGenList", BindingFlags.Static|BindingFlags.NonPublic)
.MakeGenericMethod(new Type[] { type })
.Invoke(null, (new object[] {}));
return obj;
}
private static List<T> MakeGenList<T>()
{
return new List<T>();
}
}
そして、それを次のように消費することが可能です:
var List<Employee> = GenericListBuilder.Build(typeof(Employee)) as List<Employee>;
また
IList list = GenericListBuilder.Build(Type.GetType(className)) as IList;
最後の行は完全に盲目的で、あなたが考えているものに非常に近いと思います。しかし、それは何か利点がありますか?思わない。