Phương pháp so sánh trong LINQ cho phép bạn tìm bằng IEqualityComparer, nhưng tôi không thể tìm thấy phương thức đối tác cho phép bạn truy xuất một mục bằng cùng một trình so sánh.Cách lấy đối tượng từ danh sách dựa trên IEqualityComparer <T>
Đây có phải là cách tốt nhất để làm điều đó không?
MyItem myFinderItem = new MyItem(keyField1, keyField2);
if (myList.Contains(myFinderItem, new MyEqualityComparer()))
{
MyItem myRealItem = myList.Single(item => new MyEqualityComparer().Equals(item , myFinderItem));
}
(Tôi đang chia sẻ việc sử dụng các IEqualityComaprer với một cuộc gọi đến Trừ phương pháp LINQ và tôi muốn duy trì một nguồn duy nhất để so sánh bình đẳng)
Edit: Những gì tôi đang tìm kiếm cho một phương pháp có chữ ký:
T Find<T>(T t, IEqualityComparer<T> comparer)
Edit2: tôi đoán việc này,
nó sôi nổi
. nhưng nó kinh khủng và sẽ không bao giờ sử dụng nó :(
myList.Intersect(new List<MyItem>{myFinderItem}, comparer).Single();
Bạn mong đợi hành vi nào nếu phần tử không được tìm thấy? – R0MANARMY
@ R0MANARMY: Không thực sự quan trọng với tôi, hoặc trả lại null hoặc ném sẽ là tốt. – Greg
Bạn cũng có thể quan tâm đến câu hỏi này (sự khác biệt giữa việc sử dụng 'Single' và sử dụng' Đầu tiên') http://stackoverflow.com/questions/2724096/linq-single-vs-first – R0MANARMY