0

我有一个类,其属性名为“值”,其类型为 Object。值可以是任何类型、结构、类、数组、IList 等。

我的问题在于设置器并确定值是否已更改。这对于值类型来说很简单,但是引用类型和列表存在问题。

对于一个类,您会假设 Equals 方法已正确实现,还是假设每次调用 setter 时值都已更改?如果我确实假设它已更改,那么也许我也应该为值类型假设它,以便行为是一致的。

对于列表,我可以检查大小,然后检查集合中的每个项目,看看它们是否发生了变化。

大家是怎么处理这个问题的?

4

2 回答 2

5

而不是拥有

object Value

你可以声明

IEquatable<T> Value

这样你就知道 Value 的所有实例都将实现 Equals 方法。因此,您可以检查两个实例的相等性。

于 2009-11-01T18:00:13.900 回答
4

为什么要关心值是否已更改?是否有理由不能假设每次调用 setter 时值都会发生变化?

如果有一个很好的技术原因,您总是可以使用泛型并使用您Value的 typeIEquatable<T>而不是 type object。这确保了对象已经实现了该Equals()方法。

于 2009-11-01T18:02:06.160 回答