从类名创建类列表

时间:2013-10-02 16:09:17

标签: c# generics reflection

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

public void getList(string className)
{

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

}

我尝试了很多方法,但对我没什么用。

1 个答案:

答案 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;

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