.NET:合并两个泛型列表

25

假设我有两个相同类型的通用列表,如何将它们合并为一个该类型的通用列表?

4个回答

35

这应该会有用

List<Type> list1;
List<Type> list2;

List<Type> combined;
combined.AddRange(list1);
combined.AddRange(list2);

这是最有效还是最方便的方式? - Hamish Grubijan
1
pstst.AddRange,Java在那里。 - blu
4
为什么不直接使用list1.AddRange(list2)呢?这可以满足需求,而且不需要创建额外的列表,并且可以省去一次添加操作。 - Erich
1
错误,不,这并不一定是更好的方法。你假设修改第一个列表是可以的(那么为什么不改第二个列表呢?),但这并没有明确说明。 - Adam Robinson
的确,那是我和Erich做出的假设。我得调整一下我的看法。如果可以修改第一个列表,那么这样会更快。 - Timo Willemsen
显示剩余3条评论

20

您可以简单地将一个列表中的项添加到另一个列表中:

list1.AddRange(list2);

如果你想保留这些列表并创建一个新的:

List<T> combined = new List<T>(list1);
combined.AddRange(list2);

或者使用LINQ方法:

List<T> combined = list1.Concat(list2).ToList();

在向列表中添加项目之前,通过创建具有正确容量的列表可以获得更好的性能:

List<T> combined = new List<T>(list1.Count + list2.Count);
combined.AddRange(list1);
combined.AddRange(list2);

连接关键字和声明方式之间有什么区别? - Hemant Kumar

9

如果你正在使用C# 3.0/.Net 3.5:

List<SomeType> list1;
List<SomeType> list2;

var list = list1.Concat(list2).ToList();

作为澄清,这需要.NET 3.5,而不仅仅是C# 3.0(扩展方法是C# 3.0的一部分,但定义它们的System.Linq.Enumerable类是.NET 3.5的一部分)。 - Adam Robinson
@Adam Robinson:感谢您的精准。 - Rafa Castaneda
1
如果你使用VS2008和LinqBridge,这可以在.NET 2.0上运行 ;) - Thomas Levesque


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接