【发布时间】: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>'
}
我认为我对泛型的误解始于创建这些新对象并使用原始数据类型实例化它们。不确定这个过程出了什么问题。
【问题讨论】: