在C#中,我们如何检查实现相等运算符的类型的引用相等性?
class C
{
public int Val{get;set;}
public static bool operator ==(C c1, C c2)
{
return c1.Val == c2.Val;
}
public static bool operator !=(C c1, C c2)
{
return c1.Val != c2.Val;
}
}
class Program
{
public static void Main(string[] args)
{
C c1=new C(){Val=1};
C c2=new C(){Val=1};
Console.WriteLine(c1==c2);//True. but they are not same objects.
//How can I Check that?
Console.Write("Press any key to continue . . . ");
}
}
答案 0 :(得分:2)
如果您的意思是引用相等,即使Object.ReferenceEquals
运算符因当前类型而重载,您也可以使用==
静态方法:
Object.ReferenceEquals(obj1, obj2);
答案 1 :(得分:0)
对象“对象平等”是什么?
如果通过“我们如何检查实现相等运算符的类型的对象相等性?”,实际上意味着“我们如何检查实现IEquatable<T>
的类型的对象相等性”,简短的答案是...... 。但是你想要(有一些警告)。
IEquatable<T>
的文档提供了一些指导原则。您可能还想实现IComparable<T>
。如果同时实现IEquatable<T>
和IComparable<T>
,那么对于Equals()
方法返回0的所有情况,true
方法返回CompareTo()
是有意义的,并且Equals()
方法可以为false
方法返回非零值的所有情况返回CompareTo()
。
此外,您可能希望确保正确覆盖==
和!=
以提供与调用Equals()相同的行为。