Обновление
Этот ответ был написан некоторое время назад, и с тех пор в пространство имен System.Collections.Immutable
был добавлен набор неизменяемых коллекций.
Оригинальный ответ
Вы можете использовать свой собственный метод для этого:
public static class HashSetExtensions {
public static HashSet<T> Union<T>(this HashSet<T> self, HashSet<T> other) {
var set = new HashSet<T>(self); // don't change the original set
set.UnionWith(other);
return set;
}
}
Используйте его так:
var composite = A.Union(B).Union(C);
Вы также можете использовать LINQ Union
, но чтобы получить набор, вам нужно передать результат конструктору HashSet
:
var composite = new HashSet<string>(A.Union(B).Union(C));
Но, HashSet
сам изменчив.Вы можете попробовать использовать F # неизменный набор .
Также, как упоминалось в комментариях ErikE , использование Concat
дает тот же результат и, вероятно, работает лучше:
var composite = new HashSet<string>(A.Concat(B).Concat(C));