web-dev-qa-db-ja.com

C#のHashSetに相当するAddRangeはありますか

リストでできること:

list.AddRange(otherCollection);

HashSetには範囲追加メソッドはありません。 HashSetに別のコレクションを追加する最良の方法は何ですか?

243
Stefanos Kargas

HashSet<T>の場合、名前は UnionWith です。

これは、HashSetが機能する明確な方法を示すためです。 Addのように、Collectionsにランダムな要素のセットを安全に__できません。一部の要素は自然に蒸発する可能性があります。

UnionWithは「別のHashSetとマージ」した後に名前を取得すると思いますが、IEnumerable<T>にもオーバーロードがあります。

429
quetzalcoatl

これは1つの方法です。

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