比较两个对象不会调用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()
是一个正则方法,可以像其他正则方法一样调用。
听起来您实际上想要重载==
和!=
操作符(并覆盖Equals()
和GetHashCode()
)。
if ( MyClassInstance1.CompareTo(MyClassInstance2) ==1 )
您当前正在检查MyClassInstance1
是否与MyClassInstance2
不同。因为它们是对象,所以每一个都是唯一的。你的if语句总是为真。您将需要调用CompareTo
方法:
if (MyClassInstance1.CompareTo(MyClassInstance2) != 0)
IComparable<T>
用于排序,而不是相等。
!=
和==
操作符不调用这个,它们调用Equals()
方法。
如果他们调用CompareTo()
,你会得到一个StackOverflowException
,因为它使用!=
和==
。