Maneira eficiente de clonar um HashSet <T>?

Alguns dias atrás, eu respondiuma pergunta interessante no SO sobreHashSet<T>. Uma possível solução envolveu a clonagem do hashset e, na minha resposta, sugeri fazer algo assim:

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

Embora essa abordagem seja bastante direta, suspeito que seja muito ineficiente: o construtor do novoHashSet<T> precisa adicionar separadamente cada item do hashset original everifique se ainda não está presente. Isso é claramente uma perda de tempo: como a coleção de fontes é umaISet<T>, é garantido que não contém duplicatas. Deve haver uma maneira de tirar proveito desse conhecimento ...

Idealmente,HashSet<T> deve implementarICloneable, mas infelizmente não é o caso. Eu também verifiquei com o Reflector para ver se oHashSet<T> O construtor fez algo específico se a coleção de origem era um hashset, mas não. Provavelmente isso poderia ser feito usando a reflexão em campos particulares, mas isso seria um truque feio ...

Então, alguém surgiu com uma solução inteligente para clonar um hashset com mais eficiência?

(Observe que essa pergunta é puramente teórica, não preciso fazer isso em um programa real)

questionAnswers(6)

yourAnswerToTheQuestion