Универсальные коллекции в .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)