我创建了一个 BinaryTreeNode<T>
类,然后创建 Add(T data)
的方法 BinaryTree<T>
类。
当我尝试比较对象的值时,编译器说:
operator '<' cannot be applied to operands of type 'T' and 'T'.
例子:
public void AddNode(T data) {
BinaryTreeNode<T> node = new BinaryTreeNode<T>(data);
BinaryTreeNode<T> temp = root;
if (temp.Value < node.Value) // **PROBLEM HERE**
...
我使用的是 VS08 快捷版。
最佳答案
你应该添加一个约束,使得 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)
...
另一种方法是传入一个 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)
这是最接近保证“<”运算符的方法 - 重载运算符是静态的,并且无法限制类型参数以要求它。
关于c# - C# : operator '<' cannot be applied to operands of type 'T' and 'T' 中的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1308002/