Tôi tự hỏi liệu LINQ có phương pháp kiểm tra xem hai bộ sưu tập có ít nhất một thành phần đơn lẻ không. Tôi sẽ mong đợi một cái gì đó như thế này:Kiểm tra bất kỳ phần tử nào tồn tại trong hai bộ sưu tập
var listA = new List<int>() { some numbers };
var listB = new List<int>() { some numbers, potentially also in list A };
bool hasSameElements = listA.hasMatchingElements(listB);
Có tồn tại trong LINQ hoặc tôi nên viết một phương pháp tùy chỉnh cho nó?
Tôi biết phương pháp Intersect, nhưng điều này có mang lại toàn bộ giao lộ không? Tôi chỉ quan tâm đến việc kiểm tra NẾU hai bộ sưu tập giao nhau, năng suất toàn bộ thiết lập có vẻ như một sự lãng phí, đặc biệt là trên các bộ sưu tập lớn hơn.
'Intersect' chỉ cho ra nhiều phần tử như được yêu cầu. Nếu bạn làm theo nó với 'Any', hoặc' FirstOrDefault', hoặc làm một 'foreach' và phá vỡ lần lặp đầu tiên, nó sẽ chỉ tìm thấy phần tử _first_ tồn tại trong cả hai danh sách (nếu có) - nó sẽ không làm phiền tìm phần còn lại. – Rawling
Howver, lưu ý rằng hoạt động 'Intersect' yêu cầu _one_ của hai chuỗi được _completely_ đọc trước khi phần tử đầu tiên có thể được mang lại. Nếu một trong các đầu vào của bạn là vô hạn, hãy đảm bảo nó không phải là đầu vào được tiêu thụ hoàn toàn. Lưu ý rằng [spec] (http://msdn.microsoft.com/en-us/library/bb460136.aspx) cho 'Intersect' _lies_ về cách nó hoạt động. – Rawling