A Set data structure was finally added to C# in the .NET Framework 3.5. It is a powerful data structure that makes life a little easier for programmers…
The C# Set is called a HashSet. It is modeled after a math set, meaning that elements must be unique. In other words a Set guarantees that there are no duplicate elements.
Now why create a Set data structure in C# when one could simply check a list before adding an element to see if it already exists? The answer: it is because searching a run-of-the-mill list is slow. A HashSet is fundamentally designed to allow fast searches, making inserts faster.
There are different implementations of Sets. Some make insertion and lookup operations super fast by hashing elements. However that means that the order in which the elements were added is lost. Other implementations preserve the added order at the cost of slower running times.
The HashSet class in C# goes for the second approach, thus preserving the order of elements. It is still much faster than a regular List. Some basic benchmarks showed that HashSet is decently faster when dealing with primary types (int, double, bool, etc.). It is a lot faster when working class objects. So that point is that HashSet is fast.
The only catch of HashSet is that there is no access by indices. To access elements you can either use an enumerator or use the built-in function to convert the HashSet into a List and iterate through that.