比较两个对象不会调用CompareTo方法

时间:2014-07-11 15:34:32

标签: c# compareto

我的类正在实现IComparable接口,如下所示。

public class MyClass : IComparable<MyClass>
    {
        public SomeEnum?      Field1            { get; set; }
        public int?           Field2            { get; set; }

        public int CompareTo(MyClass other)
        {
            if (this.Field1 == other.Field1 && this.Field2 == other.Field2)
                return 0;
            else
                return 1;
        }
    }

代码中的其他地方我正在比较这个类的两个实例,如下所示

if ( MyClassInstance1 != MyClassInstance2 )

此时,我没有看到CompareTo被调用。我在这里做错了什么想法?

4 个答案:

答案 0 :(得分:3)

CompareTo()是一种常规方法,可以像任何其他常规方法一样进行调用。

听起来您实际上想要重载==!=运算符(并覆盖Equals()GetHashCode())。

答案 1 :(得分:1)

if ( MyClassInstance1.CompareTo(MyClassInstance2) ==1 )

答案 2 :(得分:1)

您目前正在检查MyClassInstance1是否与MyClassInstance2不同。因为它们是物体,每一个都是独一无二的。并且你的if语句将永远为真。您需要调用CompareTo方法:

if (MyClassInstance1.CompareTo(MyClassInstance2) != 0)

答案 3 :(得分:1)

IComparable<T>用于排序,而不是用于相等。

!===运营商不会调用此功能,他们会调用Equals()方法。

如果他们调用了CompareTo(),那么您使用StackOverflowException!=时会得到==