在Java中,我可以拥有一个类列表,例如:
List<Class>
但是我如何在 C# 中做到这一点?
如果您的意思是实际类的列表,而不是类的实例,那么您可以使用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[] { });
相同的基本语法适用于 C#:
List<YourClass> list = new List<YourClass>();
这要求您using System.Collections.Generic;
在文件的顶部拥有,这是提供大多数通用集合的命名空间。
如果您尝试存储类型列表,则可以使用List<System.Type>
. 然后可以根据需要通过Activator.CreateInstance(接受该类型)构造这些类型的实例。
// 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);