С#: Союз двух 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);
Ответ 3
LINQ Enumerable.Union будет работать: