比较通用类型

时间:2011-09-23 21:07:28

标签: c# generics

我正在编写一个通用二进制搜索树。我需要比较两种泛型类型。该怎么做,假设用户在T类中实现了IComparable

private void Insert(T newData, ref Node<T> currentRoot)
{
    if (currentRoot == null)
    {
        currentRoot = new Node<T>(newData);
        return;
    }
    if (newData <= currentRoot.data) //doesn't work, need equivalent functionality
         Insert(newData, ref currentRoot.lChild);
    else
         Insert(newData,  ref currentRoot.rChild); 
}

2 个答案:

答案 0 :(得分:6)

您必须在方法中添加通用约束where T: IComparable<T>,以使CompareTo()方法适用于您的类型T的实例。

private void Insert(T newData, ref Node<T> currentRoot) where T: IComparable<T>
{
  //...
}

然后你可以使用:

if (newData.CompareTo(currentRoot.data) <= 0) 
{
   //...
}

答案 1 :(得分:1)

使用where子句,即

class Node<T> where T : IComparable

http://msdn.microsoft.com/en-us/library/bb384067.aspx