[英]HashSet or Distinct to read distinct values of property in List<> of objects
[英]Making HashSet<MyType> differ between objects with the same values
我已经重写了Equal(Object comparee)
方法,但是当我向HashSet中添加对象时,我仍然会得到双打。 我错过了什么? MyType
类型包含两个int
字段(比方说)。 HashSet
是否是错误的收集类型?
我希望添加一些MyType
东西,但是该集合仅存储由我定义的唯一(使用Equals
方法或任何其他方式)的唯一的东西。
当您重写Equals()
时,应始终重写GetHashCode()
Equals()
。 我通常会为该方法返回某种主键(如果有)。 否则,您可以查看该线程以获取实现它的想法。
理解这两种方法之间的关系的关键是:
Equals()
进行确定。 您还需要重写GetHashCode()
; 否则,您的对象将具有不同的哈希码,因此将自动假定为不同。 从您的对象中获取一些独特的价值,并在可用时使用它,或者仅生成您自己的价值。
而且,不要懒惰,也不要对它们全部使用相同的哈希码; 这将HashSet
的目的。
因此,对于具有两个int
字段的示例,您可以执行以下操作:
public override int GetHashCode() {
return field1 ^ field2;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.