It may contain no duplicate values.
Its elements are in no particular order; therefore the type does not implement the IList<T> <http://msdn.microsoft.com/en-us/library/5y536ey6.aspx>interface, but the more basic ICollection<T> <http://msdn.microsoft.com/en-us/library/92t2ye13.aspx>. As a consequence, elements inside a hash set cannot be randomly accessed through indices; they can only be iterated over through an enumerator.
So, it appears that C#/.Net does in fact take into account the fact that Sets are unordered, and only allows it to be iterated (as opposed to accessed with indices).
But HashSet<T> does implement IEnumerable<T>, and therefore you can still call SequenceEqual on it. .Net does not distinguish between ordered and unordered enumerables. Random access is a different concept than enumerability.
It may contain no duplicate values.
Its elements are in no particular order; therefore the type does not implement the IList<T> <http://msdn.microsoft.com/en-us/library/5y536ey6.aspx>interface, but the more basic ICollection<T> <http://msdn.microsoft.com/en-us/library/92t2ye13.aspx>. As a consequence, elements inside a hash set cannot be randomly accessed through indices; they can only be iterated over through an enumerator.
So, it appears that C#/.Net does in fact take into account the fact that Sets are unordered, and only allows it to be iterated (as opposed to accessed with indices).