我有一个类,其属性名为“值”,其类型为 Object。值可以是任何类型、结构、类、数组、IList 等。
我的问题在于设置器并确定值是否已更改。这对于值类型来说很简单,但是引用类型和列表存在问题。
对于一个类,您会假设 Equals 方法已正确实现,还是假设每次调用 setter 时值都已更改?如果我确实假设它已更改,那么也许我也应该为值类型假设它,以便行为是一致的。
对于列表,我可以检查大小,然后检查集合中的每个项目,看看它们是否发生了变化。
大家是怎么处理这个问题的?
我有一个类,其属性名为“值”,其类型为 Object。值可以是任何类型、结构、类、数组、IList 等。
我的问题在于设置器并确定值是否已更改。这对于值类型来说很简单,但是引用类型和列表存在问题。
对于一个类,您会假设 Equals 方法已正确实现,还是假设每次调用 setter 时值都已更改?如果我确实假设它已更改,那么也许我也应该为值类型假设它,以便行为是一致的。
对于列表,我可以检查大小,然后检查集合中的每个项目,看看它们是否发生了变化。
大家是怎么处理这个问题的?
而不是拥有
object Value
你可以声明
IEquatable<T> Value
这样你就知道 Value 的所有实例都将实现 Equals 方法。因此,您可以检查两个实例的相等性。
为什么要关心值是否已更改?是否有理由不能假设每次调用 setter 时值都会发生变化?
如果有一个很好的技术原因,您总是可以使用泛型并使用您Value
的 typeIEquatable<T>
而不是 type object
。这确保了对象已经实现了该Equals()
方法。