4

在Java中,我可以拥有一个类列表,例如:

List<Class>

但是我如何在 C# 中做到这一点?

4

3 回答 3

11

存储类类型

如果您的意思是实际类的列表,而不是类的实例,那么您可以使用Type而不是Class. 像这样的东西:

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

实例化类型

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

// 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[] { });
于 2013-10-03T16:24:27.487 回答
1

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

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

这要求您using System.Collections.Generic;在文件的顶部拥有,这是提供大多数通用集合的命名空间

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

于 2013-10-03T16:23:49.480 回答
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);
于 2013-10-03T16:27:28.807 回答