2010-03-17 42 views
11

我有兩個ICollection S的我想借工會。目前,我正在使用foreach循環來做這件事,但那會讓人覺得冗長而可怕。什麼是Java的addAll()的C#等價物?這個問題的C#:兩個ICollections的聯合? (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 

回答

13

可以使用Enumerable.Union擴展方法:

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

由於result聲明ICollection<T>,則需要在ToList()調用導致IEnumerable<T>轉換爲List<T>(實施ICollection<T>)。如果枚舉是可接受的,您可以將ToList()呼叫關閉,並獲得延期執行(如果需要)。

+0

在ToList() – 2010-03-17 20:50:29

+1

不幸的是,工會的工作,如果起點和命運都是集,它忽略重複的元素,因此,這是不一樣的做和Java'Collection.addAll()'這裏收集良好的通話實現很可能是一個List,其中重複的元素是有效的。 – 2012-05-30 22:41:28

+2

@edalorzo在這種情況下,你可以使用Enumerable.Concat代替:http://msdn.microsoft.com/en-us/library/bb302894 – 2012-05-30 22:51:42

-1

LINQ的Enumerable.Union將工作:

+1

少的 '我'。 – 2010-03-17 18:25:04

6

AddRange()將源列表中的另一結束,並可能滿足您的需求。

destList.AddRange(srcList);