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

С помощью списка вы можете:

list.AddRange(otherCollection);

Нет метода добавления диапазона в HashSet. Каков наилучший способ добавления другой коллекции в HashSet?

Ответ 1

Для HashSet<T> имя UnionWith.

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

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

Ответ 2

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

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;
    }
}