.NET Generic Set?

Существует ли общий контейнер, реализующий поведение "set" в .NET?

Я знаю, что могу просто использовать Dictionary<T, Object> (и, возможно, добавить nulls как значения), потому что его клавиши действуют как набор, но мне было любопытно, есть ли что-то готовое.

Ответ 1

HashSet<T> в .NET 3.5

Ответ 2

Я использую Iesi.Collections. пространство имен, которое поставляется с NHibernate (docs здесь) - возможно, стоит подумать, если вы находитесь в .NET < 3.5

Ответ 3

Представлено в .NET 3.5: HashSet<T> (см. ниже).

Представлен в .NET 4.0: ISet<T>:

Предоставляет базовый интерфейс для абстракции множеств. Эта интерфейс предоставляет методы для реализации наборов, которые коллекции, которые имеют уникальные элементы и конкретные операции.

Интерфейс имеет две реализации в .NET 4+ BCL:

  • HashSet<T>:

    ... обеспечивает высокую производительность. Набор представляет собой набор, который не содержит повторяющихся элементов и элементы которых отсутствуют особый порядок

  • SortedSet<T>:

    Представляет коллекцию объектов, которые хранятся в отсортированном порядке. SortedSet (Of T) поддерживает отсортированный порядок по мере добавления элементов и удаляется без ущерба для производительности. Дублирующиеся элементы не допускается.

FWIW: там также internal class TreeSet<T>: SortedSet<T> в пространстве имен System.Collections.Generic.
Его единственной целью, по-видимому, является использование в SortedDictionary<TKey, TValue>.