C# 确定.net中值类型、引用类型和IList的对象等价性
我有一个类,它有一个名为“Value”的属性,属于Object类型。 值可以是任何类型、结构、类、数组、IList等 我的问题是setter和确定值是否已更改。 这对于值类型来说足够简单,但引用类型和列表会带来问题 对于一个类,您会假设Equals方法已经正确实现,还是假设每次调用setter时该值都发生了变化? 如果我确实假设它已更改,那么也许我也应该为值类型假设它,以便行为是一致的 对于列表,我可以检查大小,然后检查集合中的每个项目,以查看它们是否已更改 你们怎么处理这个问题?而不是C# 确定.net中值类型、引用类型和IList的对象等价性,c#,.net,vb.net,equivalence,C#,.net,Vb.net,Equivalence,我有一个类,它有一个名为“Value”的属性,属于Object类型。 值可以是任何类型、结构、类、数组、IList等 我的问题是setter和确定值是否已更改。 这对于值类型来说足够简单,但引用类型和列表会带来问题 对于一个类,您会假设Equals方法已经正确实现,还是假设每次调用setter时该值都发生了变化? 如果我确实假设它已更改,那么也许我也应该为值类型假设它,以便行为是一致的 对于列表,我可以检查大小,然后检查集合中的每个项目,以查看它们是否已更改 你们怎么处理这个问题?而不是 obj
object Value
你可以申报
IEquatable<T> Value
这样您就知道所有Value实例都将实现Equals方法。因此,您可以检查两个实例的相等性。为什么要关心值是否已更改?有什么原因不能假设每次调用setter时值都会更改
如果有一个很好的技术原因,您可以始终使用泛型并将您的值设置为type而不是type对象。这确保了对象已经实现了Equals方法。Hi,感谢您给出了关于IEquatable的两个答案,尽管我不想对值设置此限制。我关心值是否已更改的唯一原因是引发了ValueChanged事件。老实说,我一点也不在乎,所以我假设每次调用setter时它都会改变!您的推理是有道理的,但是我不会在每次调用setter时都检查属性的值。在性能和可理解性方面,您都会受到影响。我认为大多数程序员都希望每次设置值时都会发生ValueChanged事件,而不仅仅是在设置新值时。