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

本文关键字:调用 CompareTo 方法 对象 两个 比较 | 更新日期: 2023-09-27 18:12:27

我的类实现了如下的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被调用。你知道我哪里做错了吗?

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

CompareTo()是一个正则方法,可以像其他正则方法一样调用。

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

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

您当前正在检查MyClassInstance1是否与MyClassInstance2不同。因为它们是对象,所以每一个都是唯一的。你的if语句总是为真。您将需要调用CompareTo方法:

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

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

!===操作符不调用这个,它们调用Equals()方法。

如果他们调用CompareTo(),你会得到一个StackOverflowException,因为它使用!===