107

泛型 List 上的AddRangeConcat函数有什么区别?一个比另一个推荐吗?

4

3 回答 3

135

它们具有完全不同的语义。

AddRange 通过将其他项目添加到列表中来修改列表。

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

选择具有您想要的语义的任何一个。

于 2008-09-19T07:17:46.153 回答
41

最大的区别是它AddRange改变了调用它的列表,同时Concat创建了一个新列表。因此它们有不同的用途。

也是Concat一种扩展方法,适用于任何IEnumerable<T>并返回IEnumerable<T>您需要的.ToList()以生成新列表。

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

如果您要从两个IEnumerable<T>来源创建新列表,请使用Concatwith .ToList。这具有不会改变任何一个来源的质量。

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

于 2008-09-19T07:26:23.637 回答
8

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

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

这是链接

希望这可以帮助,

于 2019-03-05T09:55:42.260 回答