Ответ ниже был написан в 2011 году. Теперь он в .NET 4.7.2 и .NET Core 2.0;это будет в .NET Standard 2.1.
Нет технической причины, по которой это невозможно, - Microsoft просто не решила представить конструктор с начальной емкостью.
Если вы можете вызвать конструктор, который принимает IEnumerable<T>
и использовать реализацию ICollection<T>
, я считаю, что в качестве начальной минимальной емкости будет использоваться размер коллекции.Обратите внимание на детали реализации.Емкость должна быть достаточно большой, чтобы хранить все отдельные элементы ...
РЕДАКТИРОВАТЬ: Я считаю, что если емкость оказывается намного больше, чем нужно, конструктор будет обрезать избыток, когдаона закончила выяснять, сколько различных элементов действительно .
В любом случае, если у вас есть коллекция, которую вы собираетесь добавить к HashSet<T>
и он реализует ICollection<T>
, тогда передача его конструктору вместо добавления элементов один за другим будет выигрышем, в основном:)
РЕДАКТИРОВАТЬ: Одним из обходных путей будет использованиеDictionary<TKey, TValue>
вместо HashSet<T>
и просто не использовать значения.Это не будет работать во всех случаях, так как не даст вам тот же интерфейс, что и HashSet<T>
.