我有一个名为'Value'的属性的类,它是Object类型。 值可以是任何类型,结构,类,数组,IList等。
我的问题在于设置器并确定值是否已更改。 这对于值类型来说非常简单,但引用类型和列表存在问题。
对于一个类,您会假设Equals方法已正确实现,或者只是假设每次调用setter时值都已更改? 如果我确实认为它已经改变了,那么也许我应该假设它也适用于值类型,以便行为是一致的。
对于列表,我可以检查大小,然后查看集合中的每个项目,看看它们是否已经更改。
你们怎么处理这个问题?
答案 0 :(得分:5)
而不是
object Value
你可以宣布
IEquatable<T> Value
这样您就知道Value的所有实例都将实现Equals方法。因此,您可以检查两个实例的相等性。
答案 1 :(得分:4)
为什么要关心价值是否发生了变化?是否有理由不能在每次调用setter时都假设值已更改?
如果有充分的技术原因,您可以随时使用泛型,并使Value
类型IEquatable<T>
而不是object
类型。这可确保对象已实现Equals()
方法。