c# - 泛型类中的泛型集合

标签 c# generics

我有一个自定义类(我们称之为 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/

相关文章:

c# - 根据标题删除选项卡项

c# - 强制变量只保存某些值

c# - 内存缓存 Aspnet MVC

c++ - C++异常捕获迟了,这可能是什么原因?

.net - 如何解决 Generic.IList<T>.this[] 和 IList.this[] 之间的调用歧义?

c# - C#中使用HtmlAgilityPack解析网页信息

c# - 可以用 jquery 开发整个 asp.net web 表单

java - 子类不能应用于父类(super class) Java

java - 代码重构,如何在不使父函数非静态的情况下分解两个两个静态函数

C# 反射(reflect)未知的子类型