Список List<T> в C#

List<T> в C#: динамический список, добавление и удаление элементов, поиск, сортировка и перебор — с примерами.

List<T> — динамический список из пространства имён System.Collections.Generic. В отличие от массива, он автоматически меняет размер: можно добавлять и удалять элементы во время работы программы.

Создание списка

using System.Collections.Generic;

var names = new List<string>();   // пустой список строк
names.Add("Аня");
names.Add("Боря");
names.Add("Вика");

Console.WriteLine(names.Count);   // 3
Console.WriteLine(names[1]);      // Боря

Вывод:

3
Боря

Можно сразу инициализировать значениями:

var primes = new List<int> { 2, 3, 5, 7, 11 };
Console.WriteLine(string.Join(", ", primes));

Вывод:

2, 3, 5, 7, 11

Основные методы

Метод / свойство

Действие

Add(x)

добавить в конец

Insert(i, x)

вставить на позицию i

Remove(x)

удалить первое вхождение x

RemoveAt(i)

удалить элемент по индексу

Contains(x)

содержит ли элемент

IndexOf(x)

индекс первого вхождения (-1 если нет)

Sort()

сортировать по умолчанию

Count

количество элементов

var nums = new List<int> { 30, 10, 20 };
nums.Add(40);
nums.Remove(10);      // удалить значение 10
nums.Insert(0, 5);    // вставить 5 в начало
nums.Sort();

Console.WriteLine(string.Join(", ", nums));
Console.WriteLine(nums.Contains(20));  // True

Вывод:

5, 20, 30, 40
True

Перебор списка

var cities = new List<string> { "Москва", "Казань", "Новосибирск" };

foreach (string city in cities)
    Console.WriteLine(city);

Вывод:

Москва
Казань
Новосибирск

Частая ловушка: изменение списка в foreach

Нельзя добавлять или удалять элементы, пока идёт foreach — возникнет исключение. Вместо этого используйте цикл for с обратным отсчётом:

var items = new List<int> { 1, 2, 3, 4, 5 };
// Удаляем чётные — идём с конца, чтобы индексы не съезжали
for (int i = items.Count - 1; i >= 0; i--)
    if (items[i] % 2 == 0)
        items.RemoveAt(i);

Console.WriteLine(string.Join(", ", items));

Вывод:

1, 3, 5

Коротко

  • List<T> — динамический список; тип элементов указывается в угловых скобках.
  • Размер меняется автоматически; Count — текущее число элементов.
  • Ключевые методы: Add, Insert, Remove, RemoveAt, Contains, Sort.
  • Не изменяйте список во время foreach — используйте обратный for.
Проверьте себя
1. Чем List<T> отличается от массива?
AList быстрее при чтении
BList меняет размер динамически, массив — нет
CВ List нельзя хранить строки
DList не поддерживает foreach
2. Как удалить элемент с индексом 2 из списка list?
Alist.Remove(2)
Blist.RemoveAt(2)
Clist.Delete(2)
Dlist[2] = null
3. Что возвращает list.Count?
AМаксимально возможный размер
BТекущее количество элементов в списке
CРазмер в байтах
DКоличество уникальных элементов

Закрепите практикой

Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.

Поддержать проект