c# - 如何使用泛型编写真正通用的树

标签 c# .net generics

假设我有一个 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));
        }

    }

问题在于树的每个节点都被限制为单一类型。然而,有些情况下根节点是一种类型,它有另一种类型的 child ,而另一种类型有第三种类型的 child (示例文档-->段落-->行-->词)。

您如何为这种情况定义通用树?

最佳答案

如果你想要一个严格的类型层次结构,你可以像这样声明它们:

class Node<T, TChild> {...}

Node<Document, Node<Paragraph, Node<Line, Word>>>

我并没有声称它会很漂亮。 :)

关于c# - 如何使用泛型编写真正通用的树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1769886/

相关文章:

.net - Excel 2003 ActionsPane 中的 AutoSize ElementHost

c# - 是否可以组合不同类型的委托(delegate)(使用返回值作为参数)?

java - 带有泛型的静态工厂方法

c# - 并非方法中的所有代码都被执行

.net - 如何使在该函数中可访问的函数中创建的 PSDrive 可用?

c# - 正确编辑多对多关系 EntityFramework C#

c# - StructureMap:在基类中注入(inject)原始属性

java - 使返回一个通用对象,而不必使类通用

c# - 如何使 MdiChild 表单位于 C# 中的选项卡中?

c# - COM 接口(interface)从 ROT 中消失