当类型参数为基类时,包含自身列表的 C# 泛型类型

本文关键字:列表 泛型类型 包含自 类型参数 基类 | 更新日期: 2023-09-27 18:33:53

我一直在尝试做一些我希望很简单的事情,但结果并非如此。我有一个基类:

public class EntityBase
{
}

以及从它继承的两个类:

public class EntityA : EntityBase
{
}
public class EntityB : EntityBase
{
}

我想使用将包装的容器类型

  1. EntityBase的实例
  2. 许多子项,它们是容器类型的其他实例。

我希望此容器公开它包含的EntityBase实例的确切类型,因此我使用 C# 泛型。但是我无法说服 C# 编译器定义容器类型的列表(现在有一个类型参数):

public class EntityNode<T> where T : EntityBase
{
    private T _node;
    private List<EntityNode<EntityBase>> _children = new List<EntityNode<EntityBase>>();                
    public EntityNode(T pNode)
    {
        _node = pNode;
    }
    public void AddChild(EntityNode<T> pNode) 
    {
        //_children.Add(pNode); //this is not going to work...
    }
    public T Root
    {
        get { return _node; }
        set { _node = value; }
    }        
}

是否可以允许EntityNode包含一个列表,而该列表又包含EntityNode<EntityA>EntityNode<EntityB>EntityNode<EntityBase>实例?

当类型参数为基类时,包含自身列表的 C# 泛型类型

使用 List<EntityNode<T>> 而不是 List<EntityNode<EntityBase>> 怎么样:

private List<EntityNode<T>> _children = new List<EntityNode<T>>();