我正在尝试使用泛型在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错误无法比较。我有什么想法可以解决这个问题吗?
答案 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
。