Есть ли в .Net что-то, что позволяет хранить / получать / содержать ключи без значений? Я могу использовать Dictionary<string, string> и всегда хранить String.Empty в качестве значения, но, может быть, есть какое-то лучшее решение?
Dictionary<string, string>
String.Empty
Вы можете использовать класс HashSet<T>, он предназначен для хранения различных значений в наборе.
HashSet<T>
Основное различие между этим и IDictionary{TKey, TValue} (не считая того факта, что оно не хранит значения) заключается в том, что вы можете добавить то же значение к HashSet<T> и, если оно уже существует он не генерирует исключение (когда вы пытаетесь вызвать Add метод для него, в отличие от Add метода для IDictionary{TKey, TValue}, который выбрасывает ArgumentException если элемент уже существует в словаре.
IDictionary{TKey, TValue}
Add
ArgumentException
Попробуйте Hashset<T>, если вы используете .NET 3.5 или выше.
Hashset<T>
Вы, вероятно, ищете System.Collections.Generic.HashSet
Вот соответствующая выдержка из MSDN:
Класс HashSet обеспечивает высокопроизводительные операции над множествами. Множество это коллекция, которая не содержит дубликаты элементов и чьи элементы в произвольном порядке. Емкость объекта HashSet равна количество элементов этого объекта может держать. Объект HashSet емкость автоматически увеличивается по мере элементы добавляются к объекту. Начиная с .NET Framework версия 4, класс HashSet реализует интерфейс ISet .
Класс HashSet обеспечивает высокопроизводительные операции над множествами. Множество это коллекция, которая не содержит дубликаты элементов и чьи элементы в произвольном порядке.
Емкость объекта HashSet равна количество элементов этого объекта может держать. Объект HashSet емкость автоматически увеличивается по мере элементы добавляются к объекту.
Начиная с .NET Framework версия 4, класс HashSet реализует интерфейс ISet .
Если вы используете .NET 3.5, вы можете использовать класс HashSet.Если нет, то вам нужно создать свой собственный универсальный класс (возможно, наследовать от List<> и выполнить проверки).
List<>
List<T> имеет Содержит метод , чтобы проверить, существует ли определенный элемент в списке, но HashSet, как другие предполагают, будет работать и, вероятно, быстрее, поскольку он не может содержать дубликаты.List<T> может иметь повторяющиеся значения.
List<T>
HashSet