【发布时间】:2010-09-11 03:23:27
【问题描述】:
【问题讨论】:
标签: .net linq list extension-methods
【问题讨论】:
标签: .net linq list extension-methods
它们具有完全不同的语义。
AddRange 通过添加其他项目来修改列表。
Concat 返回一个包含列表和其他项目的新序列,而不修改列表。
选择具有您想要的语义的任何一个。
【讨论】:
最大的区别在于AddRange 改变了调用它的列表,而Concat 创建了一个新列表。因此它们有不同的用途。
另外,Concat 是一种扩展方法,适用于任何 IEnumerable<T> 并返回一个 IEnumerable<T>,您需要一个 .ToList() 来生成一个新列表。
如果您想扩展现有列表的内容,请使用AddRange。
如果您要从两个 IEnumerable<T> 源创建新列表,请使用 Concat 和 .ToList。这具有不会改变任何一个来源的质量。
如果您只需要枚举两个列表(或任何其他 IEnumerable)的内容,那么每次只需使用 Concat,这样做的好处是不会实际分配新内存来保存统一列表。
【讨论】:
【讨论】:
Concat 和 AddRange 与 List<KeyValuePair<string, string>> 的 1000 个元素,连接/添加 100 次,AddRange 的速度非常快。结果如下:AddRange 13 毫秒,Concat().ToList() 16,000 毫秒,Concat 在IEnumerable 上仅在最后执行ToList:2,700 毫秒。