List C# — списки — представляют собой удивительно гибкий инструмент по работе с коллекциями. Одной из главных особенностей списков является возможность использовать любой тип данных. Кроме того, в списках реализовано множество полезных методов.

Подпишись на группу Вконтакте и Телеграм-канал. Там еще больше полезного контента для программистов.
А на YouTube-канале ты найдешь обучающие видео по программированию. Подписывайся!

Список может быть объявлен следующим образом:

var someList = new List<[тип данных]>();

По сути, использоваться может абсолютно любой тип данных. Данный механизм называется обобщения C#.

list C#
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-канал. Там еще больше полезного и интересного для программистов.