我必须创建一个列表,但我只知道类名
public void getList(string className)
{
IList lsPersons = (IList)Activator.CreateInstance(
typeof(List<>).MakeGenericType(Type.GetType(className))));
}
我尝试了很多方法,但对我没什么用。
答案 0 :(得分:1)
您可以制作通用列表,但它没用。如果您想拥有通用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;
最后一行是完全失明的,我认为它与您的想法非常接近。但它有什么好处吗?我不认为。