我创建了一个BinaryTreeNode<T>
类,然后为Add(T data)
类创建了BinaryTree<T>
方法。
当我尝试比较对象的值时,编译器说:
运算符“
例:
public void AddNode(T data) {
BinaryTreeNode<T> node = new BinaryTreeNode<T>(data);
BinaryTreeNode<T> temp = root;
if (temp.Value < node.Value) // **PROBLEM HERE**
...
我正在使用VS08 Express Edition。
最佳答案
您应该添加一个约束,以使T必须实现IComparable<T>
,然后使用该约束:
public class BinaryTree<T> where T : IComparable<T>
{
public void AddNode(T data)
{
BinaryTreeNode<T> node = new BinaryTreeNode<T>(data);
BinaryTreeNode<T> temp = root;
if (temp.Value.CompareTo(node.Value) < 0)
...
一种替代方法是传入
IComparer<T>
并使用它:public class BinaryTree<T> where T : IComparable<T>
{
private readonly IComparer<T> comparer;
public BinaryTree(IComparer<T> comparer)
{
this.comparer = comparer;
...
}
public void AddNode(T data)
{
BinaryTreeNode<T> node = new BinaryTreeNode<T>(data);
BinaryTreeNode<T> temp = root;
if (comparer.Compare(temp.Value, node.Value) < 0)
这是最接近保证“