确定.net中值类型,引用类型和IList的对象等效性

时间:2009-11-01 17:53:38

标签: c# .net vb.net equivalence

我有一个名为'Value'的属性的类,它是Object类型。 值可以是任何类型,结构,类,数组,IList等。

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

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

对于列表,我可以检查大小,然后查看集合中的每个项目,看看它们是否已经更改。

你们怎么处理这个问题?

2 个答案:

答案 0 :(得分:5)

而不是

object Value

你可以宣布

IEquatable<T> Value

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

答案 1 :(得分:4)

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

如果有充分的技术原因,您可以随时使用泛型,并使Value类型IEquatable<T>而不是object类型。这可确保对象已实现Equals()方法。