Эффективный способ клонировать HashSet <T>?
Несколько дней назад я ответилинтересный вопрос на ТАК оHashSet<T>
, Возможное решение заключалось в клонировании хэш-набора, и в своем ответе я предложил сделать что-то вроде этого:
HashSet<int> original = ...
HashSet<int> clone = new HashSet<int>(original);
Хотя этот подход довольно прост, я подозреваю, что он очень неэффективен: конструктор новогоHashSet<T>
необходимо отдельно добавить каждый элемент из исходного хэш-набора, ипроверь если его еще нет, Это явно пустая трата времени: так как сбор источникаISet<T>
гарантированно не содержит дубликатов. Должен быть способ воспользоваться этими знаниями ...
В идеале,HashSet<T>
следует реализоватьICloneable
, но, к сожалению, это не так. Я также проверил с Reflector, чтобы увидеть, еслиHashSet<T>
Конструктор сделал что-то конкретное, если исходная коллекция была хэш-сеттом, но это не так. Вероятно, это можно сделать, используя отражение в приватных полях, но это было бы уродливым ...
Итак, кто-то придумал умное решение для более эффективного клонирования хэш-набора?
(Обратите внимание, что этот вопрос чисто теоретический, мне не нужно делать это в реальной программе)