Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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
.net 所有成员都相同的类的哈希集和不同实例_.net_Equals_Equality_Hashset_Iequalitycomparer - Fatal编程技术网

.net 所有成员都相同的类的哈希集和不同实例

.net 所有成员都相同的类的哈希集和不同实例,.net,equals,equality,hashset,iequalitycomparer,.net,Equals,Equality,Hashset,Iequalitycomparer,假设我有一个叫做myclass的类 在我的代码中,我有两个myclass实例,myclass1和myclass2。 它们的一切(公共和私人)属性都是相同的 如果我尝试将它们都添加到哈希集中,它会同时添加还是只添加一个? 如果它同时添加了这两个元素,而我不想这样做,那么我可以在myclass定义中设置equals吗?HasSet会知道如何使用它吗?简单回答,这取决于对象的equals方法 详细回答: HashSet将使用IEqualityComparer来确定两个对象是否相等。如果不提供,它将使用

假设我有一个叫做myclass的类

在我的代码中,我有两个myclass实例,myclass1和myclass2。 它们的一切(公共和私人)属性都是相同的

如果我尝试将它们都添加到哈希集中,它会同时添加还是只添加一个?
如果它同时添加了这两个元素,而我不想这样做,那么我可以在myclass定义中设置equals吗?HasSet会知道如何使用它吗?

简单回答,这取决于对象的equals方法

详细回答:

HashSet将使用IEqualityComparer来确定两个对象是否相等。如果不提供,它将使用
EqualityComparer.Default
;它实际上只是使用object.Equals(a,b)加上一些东西来避免装箱值类型

检查文档中的
object.Equals(a,b)
:检查空值后,它实际上只是执行
a.Equals(b)

object.Equals(other)
的默认实现是仅检查引用相等性(即,它们是对象的完全相同实例),但您可以覆盖它来执行任何检查,例如检查ID字段是否相同。注意,当重写Equals时,还必须重写GetHashCode

如果您想在不改变对象定义的情况下更改HashSet确定相等性的方式,可以为其提供自定义IEqualityComparer