Sự khác biệt giữa các hàm AddRange và Concat trên một Danh sách chung là gì? Cái này có được đề xuất hơn cái kia không?
Câu 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 đó.
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 bất kỳ cái nào có ngữ nghĩa bạn muốn.
Sự khác biệt lớn là AddRange thay đổi danh sách đó mà nó được gọi trong khi Concat tạo một Danh sách mới. Do đó chúng có những cách sử dụng khác nhau.
Ngoài ra, Concat là một phương thức mở rộng áp dụng cho bất kỳ IEnumerable nào và trả về IEnumerable mà bạn cần có .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 một 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 thay đổ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 nào 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 thực sự phân bổ bộ nhớ mới để giữ danh sách thống nhất.
Tôi thấy bài viết thú vị này nói về sự khác biệt giữa 2 cấu trúc này và so sánh hiệu suất của chúng ...
Ý tưởng chính là AddRange nhanh hơn nhiều so với các bộ sưu tập kích thước lớn.
Đây là liên kết
Hi vọng điêu nay co ich,
Concat
và AddRange
với một List<KeyValuePair<string, string>>
với 1000 phần tử, được nối / thêm vào 100 lần và AddRange
cực kỳ nhanh hơn. Kết quả thu được sau đây: AddRange
13 ms, Concat().ToList()
16.000 ms, và Concat
trên một IEnumerable
chỉ làm ToList
ở cuối: 2.700 ms.