C#中的比较:operator'<'不能应用于'T'和'T'类型的操作数

Pra*_*are 2 c# generics

我创建了一个BinaryTreeNode<T>类,然后Add(T data)BinaryTree<T>类创建方法.

当我尝试比较对象的值时编译器说:

operator'<'不能应用于'T'和'T'类型的操作数.

例:

  public void AddNode(T data) {
        BinaryTreeNode<T> node = new BinaryTreeNode<T>(data);
        BinaryTreeNode<T> temp = root;

        if (temp.Value < node.Value) // **PROBLEM HERE**
        ...
Run Code Online (Sandbox Code Playgroud)

我正在使用VS08 Express Edition.

Jon*_*eet 8

您应该添加一个约束,以便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)
        ...
Run Code Online (Sandbox Code Playgroud)

另一种方法是传入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)
Run Code Online (Sandbox Code Playgroud)

这是保证"<"运算符最接近的 - 重载运算符是静态的,并且没有办法约束类型参数来要求它.