2

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

public void getList(string className)
{

 IList lsPersons = (IList)Activator.CreateInstance(
        typeof(List<>).MakeGenericType(Type.GetType(className))));

}

我尝试了很多方法,但对我没有任何效果。

4

1 回答 1

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;

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

于 2013-10-02T16:52:58.423 回答