.NET List <t> Concat与AddRange </t>

时间:2008-09-19 07:14:49

标签: .net linq list extension-methods

通用列表上的AddRangeConcat函数有什么区别?一个推荐超过另一个吗?

3 个答案:

答案 0 :(得分:103)

他们的语义完全不同。

AddRange通过向其添加其他项来修改列表。

Concat返回一个包含列表和其他项的新序列,而不修改列表。

选择具有所需语义的那个。

答案 1 :(得分:30)

最大的区别在于AddRange会改变调用它的列表,而Concat会创建一个新的List。因此它们有不同的用途。

此外,Concat是一个扩展方法,适用于任何IEnumerable并返回一个IEnumerable,您需要一个.ToList()来生成一个新的List。

如果要扩展现有列表的内容,请使用AddRange。

如果要从两个IEnumerable源创建新列表,请使用带有.ToList的Concat。它的质量不会改变任何一种来源。

如果您只需要枚举两个列表(或任何其他IEnumerable)的内容,那么每次只使用Concat,这样做的好处是不会实际分配新内存来保存统一列表。

答案 2 :(得分:3)

我发现这篇有趣的文章讨论了这两种结构之间的区别并比较了它们的性能...

主要思想是,AddRange在处理大尺寸集合时要快得多。

这里是Link

希望这会有所帮助,