Эффективный способ клонировать HashSet <T>?

Несколько дней назад я ответилинтересный вопрос на ТАК оHashSet<T>, Возможное решение заключалось в клонировании хэш-набора, и в своем ответе я предложил сделать что-то вроде этого:

HashSet<int> original = ...
HashSet<int> clone = new HashSet<int>(original);

Хотя этот подход довольно прост, я подозреваю, что он очень неэффективен: конструктор новогоHashSet<T> необходимо отдельно добавить каждый элемент из исходного хэш-набора, ипроверь если его еще нет, Это явно пустая трата времени: так как сбор источникаISet<T>гарантированно не содержит дубликатов. Должен быть способ воспользоваться этими знаниями ...

В идеале,HashSet<T> следует реализоватьICloneable, но, к сожалению, это не так. Я также проверил с Reflector, чтобы увидеть, еслиHashSet<T> Конструктор сделал что-то конкретное, если исходная коллекция была хэш-сеттом, но это не так. Вероятно, это можно сделать, используя отражение в приватных полях, но это было бы уродливым ...

Итак, кто-то придумал умное решение для более эффективного клонирования хэш-набора?

(Обратите внимание, что этот вопрос чисто теоретический, мне не нужно делать это в реальной программе)

Ответы на вопрос(6)

Ваш ответ на вопрос