List<T>にはAddRangeがありますが、なぜかHashSet<T>にはありません。
拡張メソッドで実装してみました。
HashSetExtensions.cs
using System; using System.Collections.Generic; namespace Extensions { public static class HashSetExtensions { /// <summary> /// 指定したコレクションの要素を<see cref="System.Collections.Generic.HashSet<T>"/>の末尾に追加します。 /// </summary> /// <typeparam name="T">ハッシュセット内の要素の型。</typeparam> /// <param name="self"><see cref="System.Collections.Generic.HashSet<T>"/>のインスタンス。</param> /// <param name="collection"> /// <see cref="System.Collections.Generic.HashSet<T>"/>の末尾に要素が追加されるコレクション。 /// コレクション自体をnullにすることはできませんが、型<typeparamref name="T"/>が参照型の場合、 /// コレクションに格納する要素はnullであってもかまいません。 /// </param> public static void AddRange<T>(this HashSet<T> self, IEnumerable<T> collection) { if (self == null) throw new NullReferenceException(string.Format("nullに対して{0}を呼び出すことはできません。", nameof(AddRange))); if (collection == null) throw new ArgumentNullException(nameof(collection), "パラメーターがnullです。"); foreach (T item in collection) { self.Add(item); } } } }
Program.cs
using System; using System.Collections.Generic; namespace Extensions { class Program { static void Main(string[] args) { HashSet<int> hashSet = new HashSet<int>() { 1, 2, 3 }; hashSet.AddRange(new List<int>() { 2, 3, 4 }); foreach (int i in hashSet) { Console.WriteLine(i); } Console.ReadKey(); } } }
実行結果
ちゃんと、重複が排除されています。