Sự khác nhau giữa các hàm AddRange và Concat trên Danh sách chung là gì? Là một trong những đề nghị khác?.NET List <T> Concat vs AddRange
Trả lời
Chúng có ngữ nghĩa hoàn toàn khác nhau.
AddRange sửa đổi danh sách bằng cách thêm các mục khác vào danh sách.
Concat trả về một chuỗi mới chứa danh sách và các mục khác mà không sửa đổi danh sách.
Chọn tùy chọn nào có ngữ nghĩa bạn muốn.
Sự khác biệt lớn nhất là các đột biến AddRange liệt kê mà nó được gọi trong khi Concat tạo một Danh sách mới. Do đó họ có cách sử dụng khác nhau.
Ngoài ra Concat là một phương pháp mở rộng áp dụng cho bất kỳ IEnumerable và trả về một IEnumerable bạn cần một .ToList() để dẫn đến một danh sách mới.
Nếu bạn muốn mở rộng nội dung của danh sách hiện có, hãy sử dụng AddRange.
Nếu bạn đang tạo danh sách mới từ hai nguồn IEnumerable thì hãy sử dụng Concat với .ToList. Điều này có chất lượng mà nó không biến đổi một trong hai nguồn.
Nếu bạn chỉ cần liệt kê nội dung của hai Danh sách (hoặc bất kỳ IEnumerable khác) thì chỉ cần sử dụng Concat mỗi lần, điều này có lợi thế là không phân bổ bộ nhớ mới để giữ danh sách hợp nhất.
+1, Thật vậy, nếu bạn quên 'tha thứ', concat lặng lẽ không làm gì cả – smirkingman
- 1. ObservableCollection <> vs. List <>
- 2. ArrayList vs List <> in C#
- 3. @OneToMany List <> vs Set <> khác biệt
- 4. DANH <> AddRange ném ArgumentException
- 5. Ghi đè .NET Generic List <MyType> .Contains (MyTypeInstance)?
- 6. Danh sách <IJob> .AddRange (Danh sách <Job>) Không hoạt động
- 7. .NET Casting Generic List
- 8. Danh sách <? mở rộng Base> VS List <Base>
- 9. ICollection <T> Vs List <T> trong Entity Framework
- 10. List <> Comparer riêng
- 11. Pandas DataFrame concat vs chắp thêm
- 12. Hash table vs Hash list vs Hash tree?
- 13. std :: list vs std :: vector iteration
- 14. C# List <> để xml
- 15. Initialize List <> với Arrays.asList
- 16. IEnumerable <T> VS IList <T> VS IQueryable <T>
- 17. Tuy nhiên, một lần nữa vào chuỗi gắn vs concat vs +
- 18. Sự khác biệt đáng kể trong Array vs Array List?
- 19. Quicksort Python - List comprehension vs Recursion (thói quen phân vùng)
- 20. List.empty vs. List() so với Danh sách mới()
- 21. Chủ đề Danh sách <T> .AddRange() có an toàn không?
- 22. Khởi tạo một loại tài sản của List <>
- 23. Binding List <> để một listview trong asp.net C#
- 24. C#: Inheritance Problem with List <T>
- 25. std :: list <> :: splice invalidates iterators. Lý do?
- 26. Tìm hiểu về số điện thoại <layer-list>
- 27. Array List <File> to Array File []
- 28. <?> vs <T>
- 29. <applet> vs <object>
- 30. <cstdint> vs <stdint.h>
Vì vậy, ion một vòng lặp chặt chẽ, nó sẽ là tốt hơn để sử dụng thêm phạm vi để không làm mất hiệu suất do tất cả các nội mới và đập GC? – johnc
Trên thực tế, do việc thực hiện trì hoãn, việc sử dụng Concat có thể nhanh hơn vì nó * tránh phân bổ đối tượng - Concat không sao chép bất cứ thứ gì. Nó chỉ tạo liên kết giữa các danh sách để liệt kê và bạn kết thúc một danh sách để bắt đầu tiếp theo! –