C#通用类类型和IComparable,不能比较类型T.

时间:2016-06-12 00:43:22

标签: c# generics

我正在尝试使用泛型在C#中实现二进制搜索树,但我不知道如何实现IComparable接口。我无法比较通用类型T,因此我不知道如何实现CompareTo()功能。

以下是代码:

public class BSTNode<T> : IComparable<BSTNode<T>>
{
    public T Data { get; set; }
    public BSTNode<T> LeftChild { get; private set; }
    public BSTNode<T> RightChild { get; private set; }

    ...
}

在尝试实现public void Insert(BSTNode<T> node)时,我需要比较Data属性,但是我收到错误消息,说我无法比较泛型类型T.

我尝试实现IComparable接口,但在CompareTo函数中,它与T错误无法比较。我有什么想法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

如果您向通用类型添加约束,那么它将起作用。

public class BSTNode<T> : IComparable<BSTNode<T>> where T : IComparable<T>
{
    public T Data { get; set; }
    public BSTNode<T> LeftChild { get; private set; }
    public BSTNode<T> RightChild { get; private set; }

    public int CompareTo(BSTNode<T> other)
    {
        return this.Data.CompareTo(other.Data);
    }
}

答案 1 :(得分:0)

您需要的是通用类型约束:

public class BSTNode<T> : IComparable<BSTNode<T>>
    where T : IComparable<T>

这样,您就可以在CompareTo上致电Data