假设我有一个Node类,如下所示:
class Node<T>
{
T data;
List<Node<T>> children;
internal Node(T data)
{
this.data = data;
}
List<Node<T>> Children
{
get
{
if (children == null)
children = new List<Node<T>>(1);
return children;
}
}
internal IEnumerable<Node<T>> GetChildren()
{
return children;
}
internal bool HasChildren
{
get
{
return children != null;
}
}
internal T Data
{
get
{
return data;
}
}
internal void AddChild(Node<T> child)
{
this.Children.Add(child);
}
internal void AddChild(T child)
{
this.Children.Add(new Node<T>(child));
}
}
Run Code Online (Sandbox Code Playgroud)
问题是树的每个节点都被限制在一个类型中.但是,在某些情况下,根节点属于一种类型,其中包含具有第三种类型子节点的另一种类型的子节点(示例文档 - >段落 - >行 - >单词).
如何为这种情况定义通用树?
如果你想要一个严格的类型层次结构,你可以像这样声明它们:
class Node<T, TChild> {...}
Node<Document, Node<Paragraph, Node<Line, Word>>>
Run Code Online (Sandbox Code Playgroud)
我没有声称它会很漂亮.:)
如何为这种情况定义通用树?
我不会试图在第一时间.如果我想建模的是:
那为什么你需要通用节点呢?创建一个类段落,它有一个List<Word>类,一个类文档有一个List<Paragraph>,然后创建一个List<Document>,你就完成了.为什么需要人为地施加通用树结构?买你有什么好处?