1

.NET 中是否有直接的方法来比较两个相同类型的对象。

是否有类似 Compare(Object1, Object2) 的东西可以根据对象属性值的相等性返回一个布尔值?

我已阅读有关 IComparable 和 IComparer 接口的信息,但我正在查看所有属性的比较,而不仅仅是一两个。

问候。

4

2 回答 2

2

通常,您所描述的是 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。

于 2012-11-23T04:25:03.373 回答
0

如果我还可以扩展您可以覆盖特定类的 == 和 != 运算符。我通常会覆盖所有 3 个(等于和 2 运算符),这样我就可以使用单元测试来做类似的事情

CustomClass customClass1 = new CustomClass("Robert");
CustomClass customClass2 = new CustomClass("Robert");

Assert.IsTrue(customClass1 == customClass2);
Assert.AreEqual(customClass1, customClass2);

如果您问我,可以方便地提供所有选项。

于 2012-11-23T04:29:28.033 回答