根据msdn
IStructuralEquatable
定义支持结构对象比较的方法 平等。结构平等意味着两个对象是相同的,因为 他们有同等的价值观。它与参考相等不同 表示两个对象引用相同,因为它们引用 相同的物理对象。
不是Equals
应该做的吗? (当覆盖IEquatable
)?
答案 0 :(得分:2)
您需要IStructuralEquatable的原因是为了定义一种适用于所有对象的新比较方式。
IStructuralEquatable接口使您可以实现自定义 比较以检查集合的结构是否相等 对象。也就是说,您可以创建自己的结构定义 相等并指定此定义与集合一起使用 接受IStructuralEquatable接口的类型。
例如,如果您想要一个列表,该列表将按特定定义对其所有元素进行排序。 在这种情况下,您不希望更改类实现,因此您不需要替换Equals方法。
这将定义比较应用程序中对象的一般方法。
答案 1 :(得分:0)
Equals的合约与IStructuralEquatable的合约不同,它表示2个对象逻辑是否相等。
默认情况下,引用类型上的“等于”表示两个对象引用是否引用同一对象实例。但是,您可以根据应用程序的逻辑覆盖等于。
作为一个例子,如果Employee类的两个不同实例在系统中都代表相同的实体,则它们可能有意义。为实现此目的,具有匹配SSN属性的员工对象将被视为逻辑上相等,即使它们在结构上不相等。