IStructuralEquatable vs Equals?

本文关键字:Equals vs IStructuralEquatable | 更新日期: 2023-09-27 18:26:28

根据msdn

I结构等价

定义支持比较结构对象的方法平等结构相等意味着两个对象相等,因为它们具有相等的值。它不同于参考等式,参考等式指示两个对象引用相等,因为它们引用相同的物理对象。

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

IStructuralEquatable vs Equals?

您之所以需要IStructureEquatable,是为了定义一种适合所有对象的新比较方式。

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

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

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

Equals的契约与IStructureEquatable的契约不同,因为它指示两个对象是否在逻辑上相等。

默认情况下,引用类型上的Equals指示两个对象引用是否引用同一对象实例。但是,您可以根据应用程序的逻辑重写Equals。

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