通用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 vs List <Object>?
- 3. List <Map <String,String >> vs List <Object>
- 4. BindableCollection <> AddRange slow
- 5. Drools .NET 3.0 - List <> C#
- 6. List <Serializable> vs List <?擴展Serializable>
- 7. 如何將List放入組合框AddRange?
- 8. concat in FSharp.Core.String vs Concat in System.String
- 9. Linq聯盟VS Concat
- 10. DataTable Select vs List <T> LINQ性能
- 11. Arraylist <Interger> vs int [] list = new int [3];
- 12. lambda中的AddRange/concat功能選擇表達式
- 13. C#列表<object> AddRange的DBNull.Value
- 14. DefaultModelBinder:IList vs List
- 15. C#List <T> .ConvertAll在.NET 2.0中
- 16. DB2 concat vs double pipe
- 17. 列表<?> vs List <?擴展對象>
- 18. ICollection <T> Vs List <T> in Entity Framework
- 19. Python List Comprehension vs
- 20. lisp:good vs list
- 21. IEnumerable vs List
- 22. 列表<Tuple<T>> | AddRange與陣列
- 23. 列表<>。AddRange - where子句
- 24. EF ICollection Vs List Vs IEnumerable Vs IQueryable
- 25. 使用DynamoDBContext查詢.NET中的DynamoDB查詢<T> with QueryOperator vs QueryFilter with List <ScanCondition>
- 26. Java 8 stream vs List
- 27. list vs observable comparison table
- 28. Clojure:cons(seq)vs. conj(list)
- 29. Array to List - 無法使AddRange(IEnumerable)正常工作
- 30. 熊貓DataFrame concat vs append
所以離子形成緊密的循環,這將是更好的使用添加範圍,而不是失去的性能,因爲所有的內部newing和衝擊的GC? – johnc 2008-09-19 07:22:20
實際上,由於延遲執行,使用的毗連很可能會更快,因爲它避免了* *對象分配 - 的毗連不會複製任何東西,它只是創建的列表之間的聯繫,以便枚舉當你到達一個結束它透明帶你到下一個開始! – 2008-09-19 07:32:02