.NET 中是否有直接的方法来比较两个相同类型的对象。
是否有类似 Compare(Object1, Object2) 的东西可以根据对象属性值的相等性返回一个布尔值?
我已阅读有关 IComparable 和 IComparer 接口的信息,但我正在查看所有属性的比较,而不仅仅是一两个。
问候。
.NET 中是否有直接的方法来比较两个相同类型的对象。
是否有类似 Compare(Object1, Object2) 的东西可以根据对象属性值的相等性返回一个布尔值?
我已阅读有关 IComparable 和 IComparer 接口的信息,但我正在查看所有属性的比较,而不仅仅是一两个。
问候。
通常,您所描述的是 Equals() 方法合同的一部分,具体取决于相关类的细节。
每个相关的类都应该根据自己的语义实现 Equals。
正式地,根据 Microsoft 文章
http://msdn.microsoft.com/en-us/library/vstudio/336aedhh(v=vs.100).aspx
合同是:
x.Equals(x) 返回真。
x.Equals(y) 返回与 y.Equals(x) 相同的值。
(x.Equals(y) && y.Equals(z)) 当且仅当 x.Equals(z) 返回 true 时才返回 true。
只要 x 和 y 引用的对象没有被修改,对 x.Equals(y) 的连续调用就会返回相同的值。
x.Equals(null) 返回 false。
如果我还可以扩展您可以覆盖特定类的 == 和 != 运算符。我通常会覆盖所有 3 个(等于和 2 运算符),这样我就可以使用单元测试来做类似的事情
CustomClass customClass1 = new CustomClass("Robert");
CustomClass customClass2 = new CustomClass("Robert");
Assert.IsTrue(customClass1 == customClass2);
Assert.AreEqual(customClass1, customClass2);
如果您问我,可以方便地提供所有选项。