Tôi có hai tập hợp các chuỗi: CollectionA là một thuộc tính StringCollection của một đối tượng được lưu trữ trong hệ thống, trong khi CollectionB là một Danh sách được tạo ra trong thời gian chạy. Bộ sưu tập cần được cập nhật để phù hợp với CollectionB nếu có bất kỳ sự khác biệt nào. Vì vậy, tôi nghĩ ra những gì tôi mong đợi là một phương pháp LINQ đơn giản để thực hiện việc loại bỏ.Tại sao tôi nhận được "Bộ sưu tập đã được sửa đổi; hoạt động điều tra có thể không thực thi" khi không sửa đổi bộ sưu tập được liệt kê?
var strDifferences = CollectionA.Where(foo => !CollectionB.Contains(foo));
foreach (var strVar in strDifferences) { CollectionA.Remove(strVar); }
Nhưng tôi nhận được lỗi "Collection was modified; enumeration operation may not execute"
trên strDifferences ... mặc dù đó là số đếm riêng từ bộ sưu tập đang được sửa đổi! Ban đầu tôi đã phát minh ra điều này rõ ràng để tránh lỗi này, vì triển khai đầu tiên của tôi sẽ tạo ra nó (như tôi đã liệt kê trên CollectionA
và chỉ xóa khi !CollectionB.Contains(str)
). Bất cứ ai có thể khoe một số cái nhìn sâu sắc vào lý do tại sao điều tra này là không?
Sẽ không 'ToArray()' tốt hơn ở đây? Không cần sử dụng 'List'. – svick
@svick Đó là điều tôi đã tự hỏi trong một thời gian, nhưng đó là một câu hỏi tôi muốn hỏi vào một ngày khác. Với điều kiện nó chưa được yêu cầu, tất nhiên là -uckle- –
@GraceNote bắt được ở đây: http://stackoverflow.com/questions/1105990/is-it-better-to-call-tolist-or-toarray-in -linq-queries – nawfal