我的类正在实现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被调用。我在这里做错了什么想法?
答案 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
和!=
时会得到==
。