[英]Determining object equivalence for value types, reference types and ILists in .net
我有一个带有名为“ Value”的属性的类,该类的类型为Object。 值可以是任何类型,结构,类,数组,IList等。
我的问题是setter和确定值是否已更改。 对于值类型,这足够简单,但是引用类型和列表会带来问题。
对于类,您是否假设Equals方法已正确实现,还是仅假设每次调用setter时值都已更改? 如果我确实假定它已更改,那么也许我也应该对值类型假定它,以便行为保持一致。
对于列表,我可以检查大小,然后检查集合中的每个项目以查看它们是否已更改。
你们如何处理这个问题?
而不是
object Value
你可以声明
IEquatable<T> Value
这样,您知道Value的所有实例都将实现Equals方法。 因此,您可以检查两个实例的相等性。
您为什么要关心值是否已更改? 为什么不能仅假设每次调用setter时都更改了值,是有原因的吗?
如果有很好的技术原因,则可以始终使用泛型并使Value
的类型为IEquatable<T>
而不是object
类型。 这样可以确保对象已实现Equals()
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.