我有一个CustomObject对象覆盖GetHashCode().我有一个HashSet,我可以使用具有相同哈希码的两个不同对象调用add.两者都被添加,稍后我最终会遇到一些数据库插入问题(主键重复)...使用hashSet的目的是连接到这些数据库插入(避免键冲突).
我可能错过了HashSet的一些属性吗?即使我在添加(.Add)之前尝试检查(.Contains),我最终添加hashCode重复...
jas*_*son 26
因为HashSet<T>成员资格基于对象相等,而不是哈希代码相等.HashSet<T>只要成员根据不同的情况,拥有相同哈希码的每个成员都是完全合法的Equals.哈希码所起的作用HashSet<T>是快速测试成员资格.如果你有一个对象并且它的哈希码不在HashSet<T>,那你知道该对象不在HashSet<T>.如果你有一个对象并且它的哈希代码在HashSet<T>那里,那么你必须使用相同的哈希代码测试相等的对象链,Equals以查看对象是否实际HashSet<T>存在.这就是平衡哈希码分布很重要的原因.但并非需要唯一的哈希码.