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

Jul*_*les 0 .net c# vb.net equivalence

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

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

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

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

你们怎么处理这个问题?

Man*_*anu 5

而不是拥有

object Value
Run Code Online (Sandbox Code Playgroud)

你可以宣布

IEquatable<T> Value
Run Code Online (Sandbox Code Playgroud)

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