如何将联合通用列表转换为通用列表?

时间:2012-10-02 04:11:43

标签: c# .net c#-4.0 lambda

我有两个已经联合的通用列表。说listA和listB,都是List<SomeType>类型。

listA.Union(listB);

联合集的类型为System.Linq.Enumerable.UnionIterator<string>,与List<SomeType>不同。

我尝试过施法:

listA.Union(listB).ToList<SomeType>();

(List<SomeType>)listA.Union(listB);

两者都失败了。我试图访问ForEach(),以为我可以将结果添加到新列表中。 .Foreach()不可用。

我可以使用传统的foreach并将每个项目添加到List<SomeType>变量中。但是,是否有一个lambda语句可以在一行中进行转换,分配给List<SomeType>类型的变量?

2 个答案:

答案 0 :(得分:4)

您不必在ToList方法中显式强制转换List。如果列表的类型相同,则可以在最后执行ToList以获取相同类型的列表。

List<MyClass> listA = new List<MyClass>();
List<MyClass> listB = new List<MyClass>();
List<MyClass> temp = listA.Union(listB).ToList(); //Just do ToList at the end. 

在ToList方法中明确指定类型也应该有效。我不确定为什么它不起作用。

答案 1 :(得分:0)

UnionIEnumerable<T>接口上的扩展方法,而不是List<T>上的扩展方法,因此它不知道或不关心您是否尝试连接列表,因此不会创建一个结果,除非您明确地致电ToList

如果您想将一个列表“附加”到另一个列表,则可能需要使用AddRange方法。