List C# — списки — представляют собой удивительно гибкий инструмент по работе с коллекциями. Одной из главных особенностей списков является возможность использовать любой тип данных. Кроме того, в списках реализовано множество полезных методов.
Подпишись на группу Вконтакте и Телеграм-канал. Там еще больше полезного контента для программистов.
А на YouTube-канале ты найдешь обучающие видео по программированию. Подписывайся!
Список может быть объявлен следующим образом:
var someList = new List<[тип данных]>();
По сути, использоваться может абсолютно любой тип данных. Данный механизм называется обобщения C#.

Итак, для начала рассмотрим простые операции по добавлению, удалению и редактированию элементов списка.
// Объявление нового списка.
var someList = new List<string>();
// Добавление новых элементов в список.
someList.Add("Первая строка в списке");
someList.Add("Вторая строка в списке");
someList.Add("Третья строка в списке");
// Вывод элементов списка.
foreach (var item in someList)
{
Console.WriteLine(item);
}
Console.WriteLine();
// Получение элемента списка по индексу.
var firstElement = someList[0];
Console.WriteLine(firstElement);
// Удаление элемента из списка.
someList.Remove(firstElement);
// Удаление элемента из списка по индексу.
someList.RemoveAt(1);
Console.WriteLine();
// Вывод элементов списка.
foreach (var item in someList)
{
Console.WriteLine(item);
}
Console.ReadLine();

Итак, в данном примере рассмотрены основные методы по работе со списками. Add – позволяет добавить новый элемент в конец списка. При помощи метода Remove можно удалить выбранный элемент из списка. А метод RemoveAt удаляет элемент, расположенный по соответствующему индексу. Для очистки списка может быть использован метод Clear.
Бонусы из коробки
Кроме того, мы можем использовать разнообразные коробочные методы и свойства списков, которые доступны нам изначально. Так, мы можем получить количество элементов в списке, обратившись к свойству Count. Метод Contains позволяет определить, есть ли элемент в списке. Одним из самых приятных бонусов является метод сортировки Sort, при помощи которого можно отсортировать элементы списка по какому-либо условию. Рассмотрим код, реализующий примеры использования данных методов.
// Инициализация списка с числами.
var someList = new List<int>()
{
2,
1,
5,
4,
3,
12,
10,
8,
9
};
Console.WriteLine($"Количество элементов в списке = {someList.Count}.");
Console.WriteLine();
// Проверка наличия элемента перед его добавлением.
if (!someList.Contains(0))
{
someList.Add(0);
}
// Сортировка списка.
someList.Sort();
// Вывод элементов списка.
foreach(var item in someList)
{
Console.WriteLine(item);
}
Console.WriteLine();
Console.ReadLine();

List C# — пара слов о потокобезопасности
Списки в C# позволяют выполнять множество операций чтения в разных потоках, что не слишком безопасно. Но проблемы обычно возникают при изменении коллекции более чем в одном потоке. Именно поэтому рекомендуется блокировать список на время выполнения операций записи и чтения. Увы, коробочного механизма синхронизации нет, а потому при необходимости нужно будет реализовать свой.
Самым простым вариантом, является блокировка ресурса через lock.
// Создаем объект для блокировки.
var lockObj = new object();
// Инициализируем тестовый список.
var someList = new List<int>()
{
2,
1,
5
};
// Блокируем объект.
lock(lockObj)
{
// Что-нибудь творим с нашим списком.
someList.Add(9);
someList.Remove(2);
someList[0] = 4;
}
List C# – итого
Списки C# представляют собой крайне удобный инструмент по работе с коллекциями элементов. C# предоставляет обширный набор реализованных методов, при помощи которых можно обработать фактически любую коллекцию элементов. Кроме того, как и любой класс, списки могут быть расширены дополнительными методами и механизмами.
Кроме того, рекомендую прочитать статью Связный список C# — Linked List C#. А также подписывайтесь на группу ВКонтакте, Telegram и YouTube-канал. Там еще больше полезного и интересного для программистов.