如何在C#中存储类列表?

时间:2013-10-03 16:22:27

标签: c# list class generics reflection

在Java中,我可以得到一个类列表:

List<Class>

但是如何在C#中执行此操作?

3 个答案:

答案 0 :(得分:8)

存储类类型

如果您指的是实际类的列表,而不是的实例,那么您可以使用Type代替Class。像这样:

List<Type> types = new List<Type>();
types.Add(SomeClass.GetType());
types.Add(SomeOtherClass.GetType());

实例化类型

要实际实例化给定类Type的类,您可以使用Activator或反射。有关相关信息,请参阅this post。但是当编译器不知道构造函数/参数等时,它会变得有点复杂。

// Create an instance of types[0] using the default constructor
object newObject = Activator.CreateInstance(types[0]);

或者

// Get all public constructors for types[0]
var ctors = types[0].GetConstructors(BindingFlags.Public);

// Create a class of types[0] using the first constructor
var object = ctors[0].Invoke(new object[] { });

答案 1 :(得分:1)

相同的基本语法适用于C#:

List<YourClass> list = new List<YourClass>();

这要求您在文件顶部using System.Collections.Generic;namespace which provides most of the generic collections

如果您尝试存储类型列表,可以使用List<System.Type>。然后可以根据需要通过Activator.CreateInstance(接受类型)构建这些类型的实例。

答案 2 :(得分:0)

    // Create the list
    List<ClassName> classList = new List<ClassName>();

    // Create instance of your object
    ClassName cn = new ClassName();

    // Add the object to the list
    classList.Add(cn);