Is the .Net HashSet uniqueness calculation completely based on Hash Codes?
.net, c#, gethashcode, hashset
Solution
No, it uses equality as well. By definition, hash codes don't need to be unique - anything which assumes they will be is broken. `HashSet<T>` is sensible. It uses an `IEqualityComparer<T>` (defaulting to `EqualityComparer<T>.Default`) to perform both hash code generation and equality tests.
Problem
I was wondering whether the .Net `HashSet<T>` is based completely on hash codes or whether it uses equality as well? I have a particular class that I may potentially instantiate millions of instances of and there is a reasonable chance that some hash codes will collide at that point. I'm considering using HashSet's to store some instances of this class and am wondering if it's actually worth doing - if the uniqueness of an element is only determined on its hash code then that's of no use to me for real applications MSDN documentation seems to be rather vague on this topic - any enlightenment would be appreciated