痛苦的泛型,运算符'> ='不能应用于'T'和'T'类型的操作数

Mr.*_*bis 7 c# generics

这是我的代码:

class BinaryTree<T> 
{
    private node<T> Head;
    public class node<T> 
    {
     public T Data;
     public node<T> right;
     public node<T> left;
     public node<T> parent;
    ...
    }
    ...
    private void insert(ref T data, node<T> parent, ref node<T> currentChild) 
    {
    ...
        {
            if (currentChild.Data >= data) insert(ref data, currentChild, ref currentChild.right);
            else insert(ref data, currentChild, ref currentChild.left);
        }
     }
}
Run Code Online (Sandbox Code Playgroud)

在上面if (currentChild.Data >= data)我得到错误:

运算符'> ='不能应用于'T'和'T'类型的操作数

我该怎么做才能解决这个错误?

Pet*_*nov 11

您需要指定T实​​现IComparable,以便您可以比较:

class BinaryTree<T> where T : IComparable<T>
{
    ...
    public class node<T> where T : IComparable<T> ...
    ...
    if (currentChild.Data.CompareTo(data) >= 0) ...
    ...
}
Run Code Online (Sandbox Code Playgroud)


das*_*ght 8

这个问题的经典解决方案是(1)制作T IComparable<T>,或(2)IComparer<T>在课堂上使用或者使用仿函数.

(1)

class BinaryTree<T> where T : Comparable<T> ...
Run Code Online (Sandbox Code Playgroud)

(2)

class BinaryTree<T> {
    private node<T> Head;
    private readonly IComparer<T> comparer;
    public BinaryTree(IComparer<T> comparer) {
        this.comparer = comparer;
    }
    //...
}
Run Code Online (Sandbox Code Playgroud)