C#泛型类型,当type参数是基类

时间:2016-02-09 10:07:44

标签: c# generics

我一直在尝试做一些我希望简单的事情,但转向其他方面。 我有一个基类:

public class EntityBase
{
}

和两个继承它的类:

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

我想使用一个包装

的容器类型
  1. EntityBase
  2. 的一个实例
  3. 许多子容器,它们是容器类型的其他实例。
  4. 我希望这个容器公开它包含的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>个实例?

1 个答案:

答案 0 :(得分:0)

如何使用List<EntityNode<T>>代替List<EntityNode<EntityBase>>

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