List<T> is a class that contains multiple objects of the same data type that can be accessed using an index. For example,
// list containing integer values 
List<int> number = new List<int>() { 1, 2, 3 };
Here, number is a List containing integer values (1, 2 and 3). 
Create a List
To create List<T> in C#, we need to use the System.Collections.Generic namespace. Here is how we can create List<T>.For example,
using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
        // create a list named subjects that contain 2 elements 
        List<string> subjects = new List<string>() { "English", "Math" };
    }
}
Access the List Elements
We can access List using index notation []. For example,
using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
        // create a list
        List<string> languages = new List<string>() { "Python", "Java" };
        // access the first and second elements of languages list
        Console.WriteLine("The first element of the list is " + languages[0]);
        Console.WriteLine("The second element of the list is " + languages[1]);
    }
}
Output
The first element of the list is Python The second element of the list is Java
Since the index of the list starts from 0:
language[0]- accesses the first elementlanguage[5]- accesses the fourth element
Iterate the List  
In C#, we can also loop through each element of List<T> using a for loop. For example,
using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
        // create a list
        List<string> albums = new List<string>() { "Red", "Midnight", "Reputation" };
        // iterate through the albums list  
        for (int i = 0; i < albums.Count; i++)
            Console.WriteLine(albums[i]);
    }
}
Output
Red Midnight Reputation
In the above example, we have looped through the albums list using a for loop.
Note: The Count property returns the total number of elements inside the list.
Basic Operations on List
The List<T> class provides various methods to perform different operations on List. We will look at some commonly used List operations in this tutorial:
- Add Elements
 - Insert Elements
 - Remove Elements
 
Let's discuss each operation in detail.
Add Elements to List
To add a single element to the List, we use the Add() method of the List<T> class. For example,
using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
        // create a list
        List<string> country = new List<string>() { "Russia" };
        //add "USA" to the country list
        country.Add("USA");
        // add "Japan" to the country list 
        country.Add("Japan");
        // iterate through the country list  
        for (int i = 0; i < country.Count; i++)
            Console.WriteLine(country[i]);
    }
}
Output
Russia USA Japan
In the above example, at first, we have created a country list that contains "Russia". 
Then we added "USA" and "Japan" to the list using the Add() method. 
Insert Element in a List
To insert an element to a specified index in List, we use the Insert() method of the List<T> class. For example,
using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
        // create a list
        List<string> languages = new List<string>() { "Python", "Java", "C" };
        // insert "JavaScript" at index 2
        languages.Insert(2, "JavaScript");
        
        // display element at index 2
        Console.WriteLine(languages[2]);
    }
}
Output
JavaScript
In the above example,
languages.Insert(2, "JavaScript")inserts"JavaScript"at the 2nd index position
Remove Elements from the List
We can delete one or more items from List<T> using 2 methods:
Remove()- removes the first occurrence of an element from the given listRemoveAt()- removes the elements at the specified position in the list
Let's see examples using both methods.
Example: Remove() Method
using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
        var car = new List<string>() { "BMW", "Tesla", "Suzuki", "Tesla" };
        // remove the first occurence of "Tesla" from the list
        car.Remove("Tesla");
        // remove the first occurrence of "Suzuki" 
        car.Remove("Suzuki");
        // print the updated list after removing   
        for (int i = 0; i < car.Count; i++)
        {
            Console.WriteLine(car[i]);
        }
    }
}
Output
BMW Tesla
Here,
car.Remove("Tesla")- removes the first occurrence of"Tesla"car.Remove("Suzuki)- removes the first occurrence of"Suzuki"
We can see that,
- The original list: 
{ "BMW", "Tesla", "Suzuki", "Tesla" } - The modified list: 
{"BMW", "Tesla"} 
Example: RemoveAt() Method
using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
        var car = new List<string>() { "BMW", "Tesla", "Suzuki", "Tesla" };
        // remove the element present at the 2nd index position
        car.RemoveAt(2);
        // print the updated list after removing the element  
        for (int i = 0; i < car.Count; i++)
        {
            Console.WriteLine(car[i]);
        }
    }
}
Output
BMW Tesla Tesla
In the above example, we have removed the element of List<T> using the RemoveAt() method. 
Here, car.RemoveAt(2) removes "Suzuki" from the list. 
Frequently Asked Questions
We can also create a List using var keyword. For example,
using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
        // create a list named color 
        var color = new List<string>() {
            "Red",
            "Blue",
            "Pink"
        };
        Console.WriteLine(color[2]);
    }
}
Output
Pink