С#: Союз двух ICollections? (эквивалент Java addAll())

У меня есть два ICollection, из которых я хотел бы взять союз. В настоящее время я делаю это с циклом foreach, но это выглядит многословным и отвратительным. Что такое эквивалент С# для Java addAll()?

Пример этой проблемы:

ICollection<IDictionary<string, string>> result = new HashSet<IDictionary<string, string>>();
// ...
ICollection<IDictionary<string, string>> fromSubTree = GetAllTypeWithin(elementName, element);
foreach( IDictionary<string, string> dict in fromSubTree ) { // hacky
    result.Add(dict);
}
// result is now the union of the two sets

Ответ 1

Вы можете использовать метод расширения Enumerable.Union:

result = result.Union(fromSubTree).ToList();

Так как result объявлен ICollection<T>, вам понадобится вызов ToList(), чтобы преобразовать полученный IEnumerable<T> в List<T> (который реализует ICollection<T>). Если перечисление допустимо, вы можете оставить вызов ToList() выключенным и получить отложенное выполнение (при желании).

Ответ 2

AddRange() добавляет исходный список в конец другого и может удовлетворить ваши потребности.

destList.AddRange(srcList);