¿Hay un AddRange equivalente para un HashSet en C #?

306

Con una lista puedes hacer:

list.AddRange(otherCollection);

No hay un método de agregar rango en un HashSet . ¿Cuál es la mejor manera de agregar otra colección a un HashSet?

Stefanos Kargas
fuente

Respuestas:

547

Pues HashSet<T>el nombre es UnionWith.

Esto es para indicar la forma distinta en que HashSetfunciona. No puede con seguridad Addun conjunto de elementos aleatorios como en Collectionsalgunos, algunos elementos pueden evaporarse naturalmente.

Creo que UnionWithtoma su nombre después de "fusionarse con otro HashSet", sin embargo, también hay una sobrecarga IEnumerable<T>.

quetzalcoatl
fuente
99
Imho, HashSet(y ISet) fue creado con un término matemáticamente establecido. UnionWithEra el término más cercano. Excepto por Except, que claramente debería llamarse Subtractmatemáticamente hablando.
fa wildchild
5

Esta es una forma:

public static class Extensions
{
    public static bool AddRange<T>(this HashSet<T> source, IEnumerable<T> items)
    {
        bool allAdded = true;
        foreach (T item in items)
        {
            allAdded &= source.Add(item);
        }
        return allAdded;
    }
}
RoadieRich
fuente