我有一个自定义类(我们称之为 MyClass
),如下所示:
public class MyClass
{
private List<MyClass> list;
private object data;
}
但是,我想摆脱 object
属性并使用泛型类。所以像这样:
public class MyClass<T>
{
private List<MyClass<T>> list;
private T data;
}
但是,我需要这种行为:
MyClass<Foo> foo = new MyClass<Foo>;
foo.list = new List<MyClass<Bar>>;
所以我需要能够为 foo 实例和 foo 中的列表/数据属性拥有不同的数据类型。但通用示例中的 T 是相同的,并且仅允许这样做:
MyClass<Foo> foo = new MyClass<Foo>;
foo.list = new List<MyClass<Foo>>;
foo.list 中的每个项目将再次具有一个可能属于不同类型的列表。当我编译 MyClass 时,我不知道列表/数据属性中将包含哪些数据类型或将有多少级别。如何构建这种灵活的结构?
最佳答案
泛型旨在允许编译器对类型使用执行检查,并且它们还提供一些额外的好处。
如果每次更新 list
,则无法使用泛型实现您所描述的内容如果有一个可能不同类型的列表,那么泛型无法帮助您。
但是,如果这些类型中的每一个都共享一个公共(public)基类型或共享一个公共(public)接口(interface),那么您可以将其用作您的 T
的列表,这将允许您使用它们。
但是如果 MyClass
的每个实例仅允许 MyClass<?>
的一种类型的列表那么你可以修改MyClass
像这样:
public class MyClass<T, TList>
{
private List<MyClass<T, TList>> list;
private T data;
}
关于c# - 泛型类中的泛型集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15833397/