web-dev-qa-db-fra.com

Existe-t-il un équivalent AddRange pour un HashSet en C #?

Avec une liste, vous pouvez faire:

list.AddRange(otherCollection);

Il n'y a pas de méthode d'ajout de plage dans un HashSet. Quel est le meilleur moyen d'ajouter une autre collection à un HashSet?

260
Stefanos Kargas

Pour HashSet<T>, le nom est UnionWith .

Ceci indique la manière distincte dont fonctionne HashSet. Vous ne pouvez pas en toute sécurité Add un ensemble d’éléments aléatoires comme dans Collections, certains éléments peuvent naturellement s’évaporer.

Je pense que UnionWith prend son nom après "fusion avec un autre HashSet", cependant, il y a aussi une surcharge pour IEnumerable<T>.

456
quetzalcoatl

C'est une façon:

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