IStructuralEquatable vs Equals?

时间:2012-03-03 17:34:16

标签: c# .net-4.0 equals

根据msdn

IStructuralEquatable

  

定义支持结构对象比较的方法   平等。结构平等意味着两个对象是相同的,因为   他们有同等的价值观。它与参考相等不同   表示两个对象引用相同,因为它们引用   相同的物理对象。

不是Equals应该做的吗? (当覆盖IEquatable)?

2 个答案:

答案 0 :(得分:2)

您需要IStructuralEquatable的原因是为了定义一种适用于所有对象的新比较方式。

  

IStructuralEquatable接口使您可以实现自定义   比较以检查集合的结构是否相等   对象。也就是说,您可以创建自己的结构定义   相等并指定此定义与集合一起使用   接受IStructuralEquatable接口的类型。

例如,如果您想要一个列表,该列表将按特定定义对其所有元素进行排序。 在这种情况下,您不希望更改类实现,因此您不需要替换Equals方法。

这将定义比较应用程序中对象的一般方法。

答案 1 :(得分:0)

Equals的合约与IStructuralEquatable的合约不同,它表示2个对象逻辑是否相等。

默认情况下,引用类型上的“等于”表示两个对象引用是否引用同一对象实例。但是,您可以根据应用程序的逻辑覆盖等于。

作为一个例子,如果Employee类的两个不同实例在系统中都代表相同的实体,则它们可能有意义。为实现此目的,具有匹配SSN属性的员工对象将被视为逻辑上相等,即使它们在结构上不相等。