【发布时间】:2019-12-18 08:30:15
【问题描述】:
我正在尝试创建通用节点对象的通用树类。
using System;
using System.Collections;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
Tree<Node<int>> tree = new Tree<Node<int>>();
}
}
public class Tree<T> : IEnumerable<T>
where T : IComparable<T>
{
IEnumerator<T> IEnumerable<T>.GetEnumerator()
{
throw new NotImplementedException();
}
IEnumerator IEnumerable.GetEnumerator()
{
throw new NotImplementedException();
}
}
public class Node<TNode> : IComparable<TNode>
where TNode : IComparable<TNode>
{
TNode Value;
public int CompareTo(TNode other)
{
return Value.CompareTo(other);
}
}
但在 main 方法中我收到编译错误:
The type 'BinaryTree.Node<int>' cannot be used as type parameter 'T' in the generic type or method 'Tree<T>'. There is no implicit reference conversion from 'BinaryTree.Node<int>' to 'System.IComparable<BinaryTree.Node<int>>'.
谁能帮我理解问题出在哪里?
【问题讨论】:
-
您已声明
Node<T>可以与T进行比较。你需要:class Node<TNode> : IComparable<Node<TNode>>(注意我在界面中添加了 Node) -
这意味着我可以将节点与节点进行比较,但我想做的是使用 IComparable 接口将节点值与其他值进行比较