C# - List<T>
The List<T>
is a collection of strongly typed objects that can be accessed by index and having methods for sorting, searching, and modifying list. It is the generic version of the ArrayList that comes under System.Collections.Generic
namespace.
List<T> Characteristics
List<T>
equivalent of the ArrayList, which implements IList<T>.- It comes under
System.Collections.Generic
namespace. List<T>
can contain elements of the specified type. It provides compile-time type checking and doesn't perform boxing-unboxing because it is generic.- Elements can be added using the
Add()
,
methods or collection-initializer syntax.AddRange()
- Elements can be accessed by passing an index e.g.
myList[0]
. Indexes start from zero. List<T>
performs faster and less error-prone than theArrayList
.
Creating a List
The List<T>
is a generic collection, so you need to specify a type parameter for the type of data it can store. The following example shows how to create list and add elements.
List<int> primeNumbers = new List<int>();
primeNumbers.Add(2); // adding elements using add() method
primeNumbers.Add(3);
primeNumbers.Add(5);
primeNumbers.Add(7);
var cities = new List<string>();
cities.Add("New York");
cities.Add("London");
cities.Add("Mumbai");
cities.Add("Chicago");
cities.Add(null);// nulls are allowed for reference type list
//adding elements using collection-initializer syntax
var bigCities = new List<string>()
{
"New York",
"London",
"Mumbai",
"Chicago"
};
In the above example, List<int> primeNumbers = new List<int>();
creates a list of int type. In the same way, cities
and bigCities
are string type list. You can then add elements in a list using the Add()
method or the collection-initializer syntax.
You can also add elements of the custom classes using the collection-initializer syntax. The following adds objects of the Student
class in the List<Student>
.
var students = new List<Student>() {
new Student(){ Id = 1, Name="Bill"},
new Student(){ Id = 2, Name="Steve"},
new Student(){ Id = 3, Name="Ram"},
new Student(){ Id = 4, Name="Abdul"}
};
Adding an Array in a List
Use the AddRange()
method to add all the elements from an array or another collection to List.
AddRange() signature: void AddRange(IEnumerable<T> collection)
string[] cities = new string[3]{ "Mumbai", "London", "New York" };
var popularCities = new List<string>();
// adding an array in a List
popularCities.AddRange(cities);
var favouriteCities = new List<string>();
// adding a List
favouriteCities.AddRange(popularCities);
Accessing a List
A list can be accessed by an index, a for/foreach loop, and using LINQ queries. Indexes of a list start from zero. Pass an index in the square brackets to access individual list items, same as array. Use a foreach
or for
loop to iterate a List<T>
collection.
List<int> numbers = new List<int>() { 1, 2, 5, 7, 8, 10 };
Console.WriteLine(numbers[0]); // prints 1
Console.WriteLine(numbers[1]); // prints 2
Console.WriteLine(numbers[2]); // prints 5
Console.WriteLine(numbers[3]); // prints 7
// using foreach LINQ method
numbers.ForEach(num => Console.WriteLine(num + ", "));//prints 1, 2, 5, 7, 8, 10,
// using for loop
for(int i = 0; i < numbers.Count; i++)
Console.WriteLine(numbers[i]);
Accessing a List using LINQ
The List<T>
implements the IEnumerable
interface. So, we can query a list using LINQ query syntax or method syntax, as shown below.
var students = new List<Student>() {
new Student(){ Id = 1, Name="Bill"},
new Student(){ Id = 2, Name="Steve"},
new Student(){ Id = 3, Name="Ram"},
new Student(){ Id = 4, Name="Abdul"}
};
//get all students whose name is Bill
var result = from s in students
where s.Name == "Bill"
select s;
foreach(var student in result)
Console.WriteLine(student.Id + ", " + student.Name);
Insert Elements in List
Use the Insert()
method inserts an element into the List<T>
collection at the specified index.
Insert() signature:void Insert(int index, T item);
var numbers = new List<int>(){ 10, 20, 30, 40 };
numbers.Insert(1, 11);// inserts 11 at 1st index: after 10.
foreach (var num in numbers)
Console.Write(num);
Remove Elements from List
Use the Remove()
method to remove the first occurrence of the specified element in the List<T>
collection. Use the RemoveAt()
method to remove an element from the specified index. If no element at the specified index, then the ArgumentOutOfRangeException
will be thrown.
Remove() signature: bool Remove(T item)
RemoveAt() signature: void RemoveAt(int index)
var numbers = new List<int>(){ 10, 20, 30, 40, 10 };
numbers.Remove(10); // removes the first 10 from a list
numbers.RemoveAt(2); //removes the 3rd element (index starts from 0)
//numbers.RemoveAt(10); //throws ArgumentOutOfRangeException
foreach (var el in intList)
Console.Write(el); //prints 20 30
Check Elements in List
Use the Contains()
method to determine whether an element is in the List<T>
or not.
var numbers = new List<int>(){ 10, 20, 30, 40 };
numbers.Contains(10); // returns true
numbers.Contains(11); // returns false
numbers.Contains(20); // returns true
List<T> Class Hierarchy
The following diagram illustrates the List<T>
hierarchy.
List<T> Class Properties and Methods
The following table lists the important properties and methods of List<T>
class:
Property | Usage |
---|---|
Items | Gets or sets the element at the specified index |
Count | Returns the total number of elements exists in the List<T> |
Method | Usage |
---|---|
Add | Adds an element at the end of a List<T>. |
AddRange | Adds elements of the specified collection at the end of a List<T>. |
BinarySearch | Search the element and returns an index of the element. |
Clear | Removes all the elements from a List<T>. |
Contains | Checks whether the specified element exists or not in a List<T>. |
Find | Finds the first element based on the specified predicate function. |
Foreach | Iterates through a List<T>. |
Insert | Inserts an element at the specified index in a List<T>. |
InsertRange | Inserts elements of another collection at the specified index. |
Remove | Removes the first occurrence of the specified element. |
RemoveAt | Removes the element at the specified index. |
RemoveRange | Removes all the elements that match the supplied predicate function. |
Sort | Sorts all the elements. |
TrimExcess | Sets the capacity to the actual number of elements. |
TrueForAll | Determines whether every element in the List<T> matches the conditions defined by the specified predicate. |