从类名创建类列表

本文关键字:列表 创建 | 更新日期: 2023-09-27 18:33:33

我必须创建一个列表,但我只知道类名

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;

最后一行完全是盲目的,我认为它非常接近你的想法。但它有什么好处吗?我不认为。