我创建了一个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.
您应该添加一个约束,以便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)
这是保证"<"运算符最接近的 - 重载运算符是静态的,并且没有办法约束类型参数来要求它.