我必须创建一个列表,但我只知道类名
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))));
}
我尝试了很多方法,但对我没有任何效果。
您可以制作一个通用列表,但它没有用。如果你想要一个通用的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;
最后一行完全是盲目的,我认为它非常接近您的想法。但它有什么好处吗?我不认为。