Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确定.net中值类型、引用类型和IList的对象等价性_C#_.net_Vb.net_Equivalence - Fatal编程技术网

C# 确定.net中值类型、引用类型和IList的对象等价性

C# 确定.net中值类型、引用类型和IList的对象等价性,c#,.net,vb.net,equivalence,C#,.net,Vb.net,Equivalence,我有一个类,它有一个名为“Value”的属性,属于Object类型。 值可以是任何类型、结构、类、数组、IList等 我的问题是setter和确定值是否已更改。 这对于值类型来说足够简单,但引用类型和列表会带来问题 对于一个类,您会假设Equals方法已经正确实现,还是假设每次调用setter时该值都发生了变化? 如果我确实假设它已更改,那么也许我也应该为值类型假设它,以便行为是一致的 对于列表,我可以检查大小,然后检查集合中的每个项目,以查看它们是否已更改 你们怎么处理这个问题?而不是 obj

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

我的问题是setter和确定值是否已更改。 这对于值类型来说足够简单,但引用类型和列表会带来问题

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

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

你们怎么处理这个问题?

而不是

object Value
你可以申报

IEquatable<T> Value

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

为什么要关心值是否已更改?有什么原因不能假设每次调用setter时值都会更改


如果有一个很好的技术原因,您可以始终使用泛型并将您的值设置为type而不是type对象。这确保了对象已经实现了Equals方法。

Hi,感谢您给出了关于IEquatable的两个答案,尽管我不想对值设置此限制。我关心值是否已更改的唯一原因是引发了ValueChanged事件。老实说,我一点也不在乎,所以我假设每次调用setter时它都会改变!您的推理是有道理的,但是我不会在每次调用setter时都检查属性的值。在性能和可理解性方面,您都会受到影响。我认为大多数程序员都希望每次设置值时都会发生ValueChanged事件,而不仅仅是在设置新值时。