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

use*_*512 4 c# generics reflection class list

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

List<Class>
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*mms 8

存储类类型

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

List<Type> types = new List<Type>();
types.Add(SomeClass.GetType());
types.Add(SomeOtherClass.GetType());
Run Code Online (Sandbox Code Playgroud)

实例化类型

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

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

或者

// 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[] { });
Run Code Online (Sandbox Code Playgroud)

  • @ user1592512这不是你问的问题. (2认同)
  • 我不认为您可以在非实例化的类上使用 GetType() (2认同)