当类型参数为基类时,包含自身列表的 C# 泛型类型
本文关键字:列表 泛型类型 包含自 类型参数 基类 | 更新日期: 2023-09-27 18:33:53
我一直在尝试做一些我希望很简单的事情,但结果并非如此。我有一个基类:
public class EntityBase
{
}
以及从它继承的两个类:
public class EntityA : EntityBase
{
}
public class EntityB : EntityBase
{
}
我想使用将包装的容器类型
EntityBase
的实例- 许多子项,它们是容器类型的其他实例。
我希望此容器公开它包含的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>
实例?
使用 List<EntityNode<T>>
而不是 List<EntityNode<EntityBase>>
怎么样:
private List<EntityNode<T>> _children = new List<EntityNode<T>>();