【问题标题】:How to store a List of classes in C#?如何在 C# 中存储类列表?
【发布时间】:2013-10-03 16:22:26
【问题描述】:

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

List<Class>

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

【问题讨论】:

  • 您的意思是类型列表还是泛型列表?
  • var list = new List&lt;ClassName&gt;();??
  • Class 的对象列表还是实际类的列表?
  • 我很确定这个问题要求.Net相当于java.lang.Class&lt;T&gt;
  • 是的,没错,这样我就可以存储各种类

标签: c# list class generics reflection


【解决方案1】:

存储类类型

如果您指的是实际类的列表,而不是类的实例,那么您可以使用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[] { });

【讨论】:

  • 您好,谢谢,但是我将如何实例化添加到列表中的一种类型的实例?
  • @user1592512 这不是你问的问题。
  • @user1592512 更新了一些关于实例化的信息。
  • 我看不到您可以在非实例化类上使用 GetType()
  • @Allstar 看起来 typeof(ClassName) 可以工作。
【解决方案2】:

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

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

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

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

【讨论】:

  • Java 5 于 2004 年 9 月发布。.NET 2.0 于 2005 年 11 月发布。
  • @JonSkeet 已修复 - 很愚蠢 ;)
【解决方案3】:
    // 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多