Поделиться через


Универсальные коллекции в .NET

Библиотека классов .NET предоставляет ряд универсальных классов коллекций в пространствах имен System.Collections.Generic и System.Collections.ObjectModel. См. дополнительные сведения о часто используемых типах коллекций.

System.Collections.Generic

Многие универсальные типы коллекций являются прямыми аналогами неуниверсальных типов. Интерфейс Dictionary<TKey,TValue> — это универсальная версия Hashtable; он использует для перечисления универсальную структуру KeyValuePair<TKey,TValue> вместо DictionaryEntry.

List<T> — это универсальная версия ArrayList. Имеются универсальные классы Queue<T> и Stack<T>, соответствующие неуниверсальным версиям.

Существуют универсальные и неуниверсальные версии SortedList<TKey,TValue>. Обе эти версии являются гибридами словаря и списка. Универсальный класс SortedDictionary<TKey,TValue> представляет собой обычный словарь и не имеет неуниверсального аналога.

Универсальный класс LinkedList<T> является истинным связанным списком. У него нет неуниверсального аналога.

System.Collections.ObjectModel

Универсальный класс Collection<T> предоставляет базовый класс для создания собственных производных универсальных типов коллекций. Класс ReadOnlyCollection<T> позволяет легко создавать доступные только для чтения коллекции на основе любого типа, реализующего универсальный интерфейс IList<T>. Универсальный класс KeyedCollection<TKey,TItem> предоставляет способ хранения объектов, содержащих свои собственные ключи.

Прочие универсальные типы

Универсальная структура Nullable<T> позволяет использовать типы значений так, как будто им могут быть присвоены значения null. Это может быть полезно при работе с запросами к базе данных, где поля, содержащие типы значений, могут опускаться. Параметр универсального типа может принимать значения любого типа.

Примечание.

В C# и Visual Basic нет необходимости явно использовать Nullable<T>, так как язык имеет синтаксис для типов, допускающий значение null. См. статьи о типах значений, допускающих значение NULL, для C# и Visual Basic.

Универсальная структура ArraySegment<T> предоставляет способ выделения диапазона элементов в одномерном массиве любого типа, начинающемся с нуля. Параметр универсального типа является типом элементов массива.

Универсальный делегат EventHandler<TEventArgs> избавляет от необходимости объявления типа делегата для обработки событий, если такое событие соответствует шаблону обработки событий, используемому .NET. Предположим, что вы создали класс MyEventArgs, производный от EventArgs, для хранения данных события. Затем вы можете объявить событие следующим образом:

public:
    event EventHandler<MyEventArgs^>^ MyEvent;
public event EventHandler<MyEventArgs> MyEvent;
Public Event MyEvent As EventHandler(Of MyEventArgs)

См. также