【问题标题】:Returning a List of Nodes that are Generic Types C#返回通用类型 C# 的节点列表
【发布时间】:2023-01-27 16:02:09
【问题描述】:

我正在学习泛型,显然有一些我不了解的基本知识。

我有一个 Node 类和一个函数,它将填充节点的二叉树并将该树作为列表返回。我希望节点的值具有通用数据类型,因此我制作了 Node 类:

class Node<T>
    {
        public T dataval;
        public Node<T> left;
        public Node<T> right;
        public Node(T data)
        {
            this.dataval = data;
            this.left = null;
            this.right = null;
        }

    }

现在在创建函数时,我正在尝试使用原始类型(例如 int 或 char)创建新节点。这是我尝试过的方法以及我遇到的错误。

public static List<Node<T>> createTree<T>(int length) 
{   
                //    a
                //   / \ 
                //  b   c
                // / \   \
                //d   e   f
            Node<T> a = new Node<T>(1);     // cannot convert from 'int' to 'T'
            Node<T> b = new Node<int>(2);   // cannot implicitly convert 'Node<int>' to 'Node<T>'
            Node<int> c = new Node<int>(3);  // No error here, but error in return statement     
            var d = new Node<int>(4);     // No errror here, but error in return statement
            var e = new Node<int>(5);
            var f = new Node<int>(6);
            a.left = b;
            a.right = c;
            b.left = d;
            b.right = e;
            c.right = f;

            return new List<Node<int>> { a, b, c, d, e, f};  // cannot convert from 'Node<int>' to 'Node<T>'
             
}

我认为我对泛型的误解始于创建这些新对象并使用原始数据类型实例化它们。不确定这个过程出了什么问题。

【问题讨论】:

    标签: c# generics tree


    【解决方案1】:

    您的通用 createTree&lt;T&gt; 方法承诺创建一个树,无论类型 T 可能是什么。很明显,您不能假设 Tint。您需要将T 类型的值作为参数或工厂方法传递到方法中,或者将签名更改为List&lt;Node&lt;int&gt;&gt; createTree(int length)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-13
      • 1970-01-01
      相关资源
      最近更新 更多