C #: Союз двух ICollections? (эквивалент Java addAll ()) - PullRequest
12 голосов
/ 17 марта 2010

У меня есть два ICollection, из которых я хотел бы взять союз. В настоящее время я делаю это с циклом foreach, но это кажется многословным и отвратительным. Что такое эквивалент C # 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

Ответы [ 3 ]

13 голосов
/ 17 марта 2010

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

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

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

7 голосов
/ 10 мая 2013

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

destList.AddRange(srcList);
0 голосов
/ 17 марта 2010

LINQ's Enumerable.Union будет работать:

...