2 out of 14 rated this helpful - Rate this topic

HashSet<T> Class

Represents a set of values.

Namespace:  System.Collections.Generic
Assembly:  System.Core (in System.Core.dll)
[SerializableAttribute]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public class HashSet<T> : ICollection<T>, IEnumerable<T>, 
	IEnumerable, ISerializable, IDeserializationCallback

Type Parameters

T

The type of elements in the hash set.

Note Note:

The HostProtectionAttribute attribute applied to this type or member has the following Resources property value: MayLeakOnAbort. The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser). For more information, see the HostProtectionAttribute class or SQL Server Programming and Host Protection Attributes.

The HashSet<T> class provides high performance set operations. A set is a collection that contains no duplicate elements, and whose elements are in no particular order.

The capacity of a HashSet<T> object is the number of elements that the object can hold. A HashSet<T> object's capacity automatically increases as elements are added to the object.

System.Object
  System.Collections.Generic.HashSet<T>
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
HashSet preserves the order of the elements

Seems like the HashSet&lt;T&gt; class does not order the elements by their hash code (as most people could expect). For example see this code:

ISet&lt;string&gt; set = new HashSet&lt;string&gt; { "C#", "Java", "C++", "JavaScript", "PHP", "SQL", "Perl", "Ruby" };
foreach (var element in set)
{
Console.Write("{0} ", element);
}
// Result: C# Java C++ JavaScript PHP SQL Perl Ruby

Seems like the elements preserve their order of addition, like List&lt;T&gt;.
The documentation says that "elements are in no particular order", but it is not 100% correct.

Why this behavior is needed?

--The doc says "the elements are in no particular order", meaning that the runtime does not guarantee an order and that your code should not rely on a particular ordering, as that behavior could change with any update. (djangow, MSDG)

Spelling.
Hast is a valid spelling of an English word. That's the problem with spell checkers. They're no replacement for editing.
Spelling.
"The type of elements in the hast set."
Might want to run a spell checker.