Учебное пособие по коллекциям C# с примерами
⚡ Умное резюме
В C# коллекции предоставляют гибкий способ хранения и управления группами объектов. В отличие от массивов, коллекции увеличиваются и уменьшаются во время выполнения, а пространства имен System.Collections и System.Collections.Generic предоставляют готовые типы для списков, словарей, стеков и очередей.

В нашем предыдущем уроке мы узнали, как использовать массивы в C#. Давайте кратко рассмотрим это. Массивы в программировании используются для группировки набора связанных объектов. Таким образом, можно создать массив или набор целых чисел, доступ к которым можно получить через одно имя переменной.
Что такое коллекции в C#?
Коллекции похожи на Массивы, он обеспечивает более гибкий способ работы с группой объектов.
В массивах вы могли заметить, что вам необходимо заранее определить количество элементов в массиве. Это нужно было сделать при объявлении массива.
Но в коллекции вам не нужно заранее определять размер коллекции. Вы можете добавлять элементы или даже удалять элементы из коллекции в любой момент времени. В этой главе основное внимание будет уделено тому, как мы можем работать с различными коллекциями, доступными в C#.
Классы System.Collections
В платформе .NET Framework исходные негенерические классы коллекций объединены в пространство имен System.Collections. В таблице ниже приведены основные типы, которые можно использовать сразу же.
| | Описание |
| ArrayList | Коллекция ArrayList аналогична коллекции Arrays. тип данных в C#. Самым большим отличием является динамическая природа коллекции списков массивов. |
| Стек | Стек представляет собой особый случай коллекции, отражающий концепцию "последним вошел — первым вышел" (LIFO). |
| Очереди | Очередь представляет собой особый тип коллекции, в которой применяется принцип «первым пришел — первым обслужен». |
| Хеш-таблица | Хэш-таблица — это особый тип коллекции, используемый для хранения элементов типа «ключ-значение». |
| СортированныйСписок | SortedList — это коллекция, которая по умолчанию хранит пары ключ-значение в порядке возрастания ключей. |
| BitArray | Битовый массив — это массив структуры данных, в котором хранятся биты. |
Обобщенные коллекции в C#
В приведенных выше негенерических классах каждый элемент хранится как общий объект, что означает, что компилятор не может проверить тип, и программа несет небольшие затраты на упаковку значений. Для решения этой проблемы в C# было добавлено пространство имен System.Collections.Generic, где каждая коллекция привязана к одному объявленному типу.
Обобщенная коллекция, например, Список Принимает только строки, поэтому ошибки обнаруживаются на этапе компиляции, и при чтении элемента не требуется приведение типов. Это делает универсальные коллекции более безопасными, быстрыми и удобными для чтения, поэтому они являются выбором по умолчанию в современном коде C#.
Ниже перечислены наиболее распространенные общие коллекции:
- Список : Изменяемый размер списка на основе индексов, универсальная замена ArrayList.
- Словарь : Хранит пары ключ-значение с быстрым поиском на основе хеша.
- Хэшсет : Содержит только уникальные значения и поддерживает операции над множествами, такие как объединение.
- Очередь : Метод "первым пришел — первым обслужен", универсальная версия метода "очередь".
- Куча : Метод сбора данных «последний вошел — первый вышел», универсальная версия Stack.
- Отсортированный список : Сохраняет пары ключ-значение, отсортированные по ключу в порядке возрастания.
Пример использования коллекции списков на C#
Список (List) — наиболее широко используемая универсальная коллекция, поскольку он ведёт себя как динамический массив. В приведённом ниже примере создаётся список строк, добавляются и удаляются элементы, считывается его размер, а затем выводятся оставшиеся значения. Весь код написан в файле Program.cs.
Шаг 1) Импортируйте пространство имен System.Collections.Generic и объявите список строк.
Шаг 2) Добавляйте элементы с помощью метода Add и удаляйте их с помощью метода Remove.
Шаг 3) Прочитайте свойство Count, затем пройдитесь по списку с помощью цикла foreach.
using System; using System.Collections.Generic; namespace DemoApplication { class Program { static void Main(string[] args) { List<string> tutorials = new List<string>(); tutorials.Add("Java"); tutorials.Add("Python"); tutorials.Add("Kotlin"); tutorials.Remove("Python"); Console.WriteLine(tutorials.Count); foreach (string tutorial in tutorials) { Console.WriteLine(tutorial); } Console.ReadKey(); } } }
Code Объяснение:-
- Пространство имен System.Collections.Generic импортируется, поэтому тип List доступен программе.
- Новый список Создается файл с названием tutorials, и с помощью метода Add добавляются три имени.
- Метод Remove удаляет значение «Python», в результате чего в списке остаются два пункта.
- Свойство Count возвращает количество элементов, а цикл foreach выводит каждое оставшееся значение по порядку.
При запуске программа сначала выводит количество 2маркетологов. На втором месте Instagram – Java и Котлин на отдельных строках. Это показывает, как коллекция изменяет свой размер во время выполнения, чего не может сделать фиксированный массив.
Разница между массивами и коллекциями в C#
Оба массив Коллекция объединяет связанные элементы под одним именем, но при этом они ведут себя по-разному после запуска программы. Знание того, когда использовать тот или иной подход, помогает писать более чистый и эффективный код.
Основные различия перечислены ниже:
- Размер: Массив имеет фиксированную длину, устанавливаемую при объявлении, в то время как коллекция может увеличиваться или уменьшаться в любой момент.
- Обработка типов: Массив хранит объекты одного типа, тогда как коллекция может быть типобезопасной при использовании обобщенных типов или содержать объекты смешанных типов, если она не является обобщенной.
- Локации: Массивы встроены в язык, а классы коллекций находятся в пространствах имен System.Collections и System.Collections.Generic.
- Встроенные операции: Коллекции предоставляют удобные методы для добавления, удаления, поиска и сортировки элементов, в то время как массивы обеспечивают только базовый индексированный доступ.
- Лучший способ применения: Если количество элементов известно и фиксировано, выбирайте массив, а если количество элементов изменяется в процессе выполнения программы, используйте коллекцию.
Вкратце, массивы лучше всего подходят для данных фиксированного размера, в то время как коллекции обеспечивают гибкость, необходимую для большинства реальных приложений.
