C#:两个ICollections的联盟? (相当于Java的addAll())

时间:2010-03-17 18:19:18

标签: c# syntax coding-style

我有两个ICollection我想参加工会。目前,我正在使用foreach循环执行此操作,但这感觉冗长而丑陋。什么是Java的addAll()的C#等价物?

此问题的示例:

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 个答案:

答案 0 :(得分:13)

您可以使用Enumerable.Union扩展名方法:

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

由于result被声明为ICollection<T>,您需要ToList()调用才能将生成的IEnumerable<T>转换为List<T>(实现ICollection<T> }})。如果枚举是可接受的,您可以关闭ToList()调用,并获得延迟执行(如果需要)。

答案 1 :(得分:7)

AddRange()将源列表附加到另一个列表的末尾,可能符合您的需求。

destList.AddRange(srcList);

答案 2 :(得分:-1)

LINQ的Enumerable.Union将起作用: