Gibt es ein AddRange-Äquivalent für ein HashSet in C #?

306

Mit einer Liste können Sie Folgendes tun:

list.AddRange(otherCollection);

In einem HashSet gibt es keine Methode zum Hinzufügen von Bereichen . Was ist der beste Weg, um einem HashSet eine weitere Sammlung hinzuzufügen?

Stefanos Kargas
quelle

Antworten:

547

Denn HashSet<T>der Name ist UnionWith.

Dies soll die unterschiedliche Funktionsweise anzeigen HashSet. Sie können nicht sicher Addeine Reihe von zufälligen Elementen wie in Collections, einige Elemente können natürlich verdunsten.

Ich denke, das UnionWithhat seinen Namen nach "Zusammenführen mit einem anderen HashSet", aber es gibt auch eine Überlastung für IEnumerable<T>.

quetzalcoatl
quelle
9
Imho, HashSet(und ISet) wurde mit einem mathematisch festgelegten Term erstellt. UnionWithwar der nähere Begriff. Mit Ausnahme von Except, die Subtractmathematisch gesehen eindeutig als benannt werden sollten .
Fa Wildchild
5

Dies ist eine Möglichkeit:

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
quelle