¿Manera eficiente de clonar un HashSet <T>?

Hace unos días respondíuna pregunta interesante en SO sobreHashSet<T>. Una posible solución implicaba clonar el hashset, y en mi respuesta sugerí hacer algo como esto:

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

Aunque este enfoque es bastante sencillo, sospecho que es muy ineficiente: el constructor del nuevoHashSet<T> necesita agregar por separado cada elemento del hashset original, ycomprobar si aún no está presente. Esto es claramente una pérdida de tiempo: dado que la colección de origen es unISet<T>, se garantiza que no contiene duplicados. Debería haber una manera de aprovechar ese conocimiento ...

Idealmente,HashSet<T> debe implementarICloneable, pero desafortunadamente no es el caso. También verifiqué con Reflector para ver si elHashSet<T> el constructor hizo algo específico si la colección de origen era un hashset, pero no lo hace. Probablemente podría hacerse mediante el uso de la reflexión en campos privados, pero eso sería un truco feo ...

Entonces, ¿alguien ideó una solución inteligente para clonar un hashset de manera más eficiente?

(Tenga en cuenta que esta pregunta es puramente teórica, no necesito hacer eso en un programa real)

Respuestas a la pregunta(6)

Su respuesta a la pregunta