通用List上的AddRange和Concat函数有什么区别?其中一个推荐吗?.NET List <T> Concat vs AddRange
65
A
回答
94
它们有完全不同的语义。
AddRange通过向其添加其他项目来修改列表。
Concat返回包含列表和其他项目的新序列,而不修改列表。
选择具有您想要的语义的人。
28
最大的区别是AddRange改变了它所调用的列表,而Concat创建了一个新的List。因此它们有不同的用途。
此外Concat是适用于任何IEnumerable并返回IEnumerable的扩展方法,您需要.ToList()才能生成新的List。
如果要扩展现有列表的内容,请使用AddRange。
如果要创建两个IEnumerable的来源一个新的列表,然后使用具有的毗连.ToList。这具有不改变任何来源的质量。
如果您只需要枚举两个列表(或任何其他IEnumerable)的内容,那么只需每次使用Concat,这样做的好处是不会实际分配新内存来保存统一列表。
相关问题
- 1. LIST <>的AddRange抛出ArgumentException的
- 2. List <Map <String,String >> vs List <Object>
- 3. 如何将List放入组合框AddRange?
- 4. concat in FSharp.Core.String vs Concat in System.String
- 5. DataTable Select vs List <T> LINQ性能
- 6. lambda中的AddRange/concat功能选择表达式
- 7. C#列表<object> AddRange的DBNull.Value
- 8. DefaultModelBinder:IList vs List
- 9. PHP implode()vs sprintf()vs concat
- 10. DB2 concat vs double pipe
- 11. ICollection <T> Vs List <T> in Entity Framework
- 12. IEnumerable vs List
- 13. 列表<Tuple<T>> | AddRange与阵列
- 14. 列表<>。AddRange - where子句
- 15. Clojure:cons(seq)vs. conj(list)
- 16. Java 8 stream vs List
- 17. 使用DynamoDBContext查询.NET中的DynamoDB查询<T> with QueryOperator vs QueryFilter with List <ScanCondition>
- 18. 熊猫DataFrame concat vs append
- 19. List <T> to DataView
- 20. Array to List - 无法使AddRange(IEnumerable)正常工作
- 21. IDictionary <String,List <OpenXmlCompositeElement >> - 获取List <OpenXmlCompositeElement>?
- 22. List <Map <String,List <>>> in BaseAdapter,Android
- 23. List <int> to IEnumerable <IComparable>
- 24. ICollection <T>没有AddRange,但列表<T>没有,正在铸造坏
- 25. AddRange集合
- 26. Map List <>与Automapper?
- 27. 部队更新TGT
- 28. ASP.NET <%= %> vs <%: %>
- 29. List <string> binding
- 30. Casting C#List <>
所以离子形成紧密的循环,这将是更好的使用添加范围,而不是失去的性能,因为所有的内部newing和冲击的GC? – johnc 2008-09-19 07:22:20
实际上,由于延迟执行,使用的毗连很可能会更快,因为它避免了* *对象分配 - 的毗连不会复制任何东西,它只是创建的列表之间的联系,以便枚举当你到达一个结束它透明带你到下一个开始! – 2008-09-19 07:32:02