我们如何检查实现相等运算符的类型的引用相等性?

在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 . . . "); } } 

如果你的意思是通过引用相等,你可以使用Object.ReferenceEquals静态方法,即使==运算符被重载以使当前类型工作,否则:

 Object.ReferenceEquals(obj1, obj2); 

对象“对象平等”是什么?

如果通过“我们如何检查实现相等运算符的类型的对象相等性?”,实际上意味着“我们如何检查实现IEquatable的类型的对象相等性”,简短的答案是… 但是你想要的 (有一些警告)。

IEquatable的文档提供了一些指导。 您可能还想要实现IComparable 。 如果你同时实现了IEquatableIComparable ,那么你的Equals()方法对于CompareTo()方法返回0的所有情况都返回true ,并且你的Equals()方法返回false有意义的对于CompareTo()方法返回非零值的所有情况。

此外,您可能希望确保正确覆盖==!=以提供与调用Equals()相同的行为。