Есть ли эквивалент AddRange для HashSet в C #

307

Со списком вы можете сделать:

list.AddRange(otherCollection);

В HashSet нет метода добавления диапазона . Каков наилучший способ добавить еще одну коллекцию в HashSet?

Стефанос Каргас
источник

Ответы:

547

Ибо HashSet<T>имя UnionWith.

Это должно указать на отличный способ HashSetработы. Вы не можете безопасно Addнабор случайных элементов к нему, как в Collections, некоторые элементы могут естественно испаряться.

Я думаю, что это UnionWithберет свое имя после «слияния с другим HashSet», однако, есть и перегрузка IEnumerable<T>.

Кецалькоатль
источник
9
Imho, HashSetISet) был создан с математически заданным термином. UnionWithбыл ближе термин. За исключением того Except, что явно должно быть названо Subtract, математически говоря.
fa wildchild
5

Это один из способов:

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
источник