What Is List and HashSet Data Structure in C#?


Scott Campbell

Lists and HashSets are two commonly used data structures in the C# programming language. In this tutorial, we will explore what these data structures are and how they can be used effectively in your C# programs.


A list is an ordered collection of elements, where each element has an index associated with it. Lists in C# are represented by the List class, which is part of the System.Collections.Generic namespace.

To use a List, you first need to declare and initialize it:

List<T> myList = new List<T>();

The T in the declaration denotes the type of elements that the list will hold. For example, if you want to create a list of integers, you would replace T with int:

List<int> numbers = new List<int>();

You can then add elements to the list using the Add() method:


To access an element in the list, you can use indexing:

int firstElement = numbers[0]; // Returns 10
int secondElement = numbers[1]; // Returns 20
int thirdElement = numbers[2]; // Returns 30

You can also modify elements in a list by assigning a new value to a specific index:

numbers[1] = 25; // Modifies the second element from 20 to 25

In addition to these basic operations, lists provide various methods for manipulation, such as Remove() to remove an element, Count property to get the number of elements, and Contains() to check if a specific element exists in the list. Lists are versatile and can be used in a wide range of scenarios.


A HashSet is an unordered collection of unique elements. In other words, it does not allow duplicate values. HashSets in C# are represented by the HashSet class, also part of the System.

To use a HashSet, you need to declare and initialize it:

HashSet<T> mySet = new HashSet<T>();

The declaration is similar to that of a List. Again, T represents the type of elements that the set will hold.

You can add elements to a HashSet using the Add() method:

mySet.Add(10); // Ignored since duplicates are not allowed

To check if an element exists in a HashSet, you can use the Contains() method:

bool containsTen = mySet.Contains(10); // Returns true
bool containsFifty = mySet.Contains(50); // Returns false

You can also remove elements from a HashSet using the Remove() method:


HashSets provide efficient lookup times as they internally use a hash table to store elements. This makes them suitable for scenarios where uniqueness is important.


List and HashSet are two useful data structures in C# that can greatly simplify your programming tasks. Lists provide an ordered collection of elements, while HashSets ensure uniqueness and fast lookups. By understanding the characteristics and usage of these data structures, you can make informed decisions when designing your C# applications.