Переліки та колекції в C#

Платформа .NET містить набір типів для зберігання та керування колекціями об'єктів: списки зі змінними розмірами, пов'язані списки, відсортовані та невідсортовані словники, масиви.

  • інтерфейси, що визначають стандартні протоколи колекцій
  • готові до використання класи колекцій (списки, словники)
  • базові класи для написання колекцій

Всі ці типи розташовані у наступних просторах імен:

  • System.Collections - неузагальнені класи та інтерфейси колекцій
  • System.Collections.Specialized – строго типізовані неузагальнені класи колекцій
  • System.Collections.Generic - узагальнені класи та інтерфейси колекцій
  • System.Collections.ObjectModel — проксі та базові класи для спеціальних колекцій
  • System.Collections.Concurrent – ​​колекції, безпечні до потоків.

Всі колекції є переліками та реалізують (мають реалізовувати) інтерфейс IEnumerable або IEnumerable.

Інтерфейси перерахувань забезпечують протокол для ітерації колекції, але не надають механізму для визначення розміру колекції, доступу до члена за індексом, пошуку або модифікації колекції. Для даного функціоналу визначені інтерфейси ICollection, IList та IDictionary. Кожен з них має узагальнену та неузагальнену версію (проте неузагальнені використовуються рідко).

Ієрархія інтерфейсів колекцій:

  • IEnumerable та IEnumerable — мінімальний рівень функціональності: лише перерахування
  • ICollection та ICollection — середній рівень функціональності, наприклад, властивість Count
  • IList , IDictionary та їх неузагальнені аналоги – максимальний рівень функціональності

Перелік (Enumeration)

Нумератор, або перечислювач(enumerator) - доступний тільки для читання односпрямований курсор (forward-only cursor - курсор, що рухається тільки вперед, без можливості зворотного переміщення) перебираєпослідовність (sequence) значень. Нумератор є об'єктом, що реалізує інтерфейсSystem.Collections.IEnumerator абоSystem.Collections.Generic.IEnumerator.

Інструкція foreachперебирає, або виконує ітерацію (iterate) надперерахованими (enumerable) об'єктами. Перераховані об'єкти - це логічне уявлення послідовностей. Перерахований об'єкт — це курсор, про який говорилося вище, а об'єкт, що містить такий курсор, здатний переміщатися об'єктом і перебирати його. Об'єкт, що перераховується, або реалізує інтерфейсIEnumerable абоIEnumerable, або містить методGetEnumerator, який повертає нумератор (enumerator).

Інтерфейси IEnumerable та IEnumerator

Інтерфейс IEnumerator визначає базовий низькорівневий протокол, за допомогою якого здійснюється прохід за елементами (перерахування) послідовності в одонаправленій манері. Оголошення цього інтерфейсу: