Tôi đang nhìn vào một số mã mà phải mất một IEnumerable<T>
và chuyển đổi nó vào một List<T>
để nó có thể sử dụng List<T>.Find(predicate)
:LINQ tương đương với Danh sách <T> .Find()?
var myEnumerable = ...;
var myList = new List<T>(myEnumerable);
var match = myList.Find(value => value.Aaa == aaa && value.Bbb == bbb);
Có cách nào để viết lại này bằng cách sử dụng LINQ extension methods có tác dụng tương tự, nhưng không có xây dựng thêm List<T>
làm bước trung gian?
Phương pháp mở rộng FirstOrDefault(source, predicate)
trông giống như một ứng cử viên tốt, nhưng cố gắng tìm hiểu xem đó là chính xác tương đương với Find
đang khiến tôi đau đầu.
Đó là những gì tôi nghi ngờ, nhưng thật tuyệt khi nghe xác nhận của một người có nhiều đại diện hơn tôi (cười). Vì vậy, điều này không đối phó với tất cả các trường hợp cạnh cùng một cách? (Bộ sưu tập trống, không có gì phù hợp, bất kỳ điều kiện đặc biệt nào khác) –
@Joe: Có. Nó sẽ cung cấp cho bạn kết quả tương tự - kết quả đầu tiên, hoặc 'mặc định (T)' trong trường hợp không có phần tử phù hợp. Nó có hiệu quả giống hệt nhau, ngoại trừ việc nó hoạt động trên bất kỳ 'IEnumerable ' –