Tôi đã sử dụng LINQ một lúc (và tận hưởng nó), nhưng nó cảm thấy như tôi nhấn một speedbump khi tôi chạy qua bộ sưu tập chuyên ngành .NET (DataRowCollection, ControlCollection). Có cách nào để sử dụng LINQ với các điều khiển chuyên ngành, và nếu không bạn có nghĩ rằng Microsoft sẽ giải quyết điều này trong phiên bản tiếp theo của khuôn khổ? Hoặc là chúng ta còn lại để lặp qua những cách không LINQ, hoặc kéo các mục ra khỏi bộ sưu tập vào bộ sưu tập LINQ-có thể mình?Liệu Microsoft có bao giờ làm cho tất cả các bộ sưu tập có thể sử dụng được bởi LINQ không?
Trả lời
Lý do tại sao các bộ sưu tập như ControlCollection
không hoạt động với LINQ là chúng không được nhập mạnh. Không có kiểu phần tử LINQ không thể tạo các phương thức được gõ mạnh. Miễn là bạn biết loại, bạn có thể sử dụng phương pháp Cast
để tạo một kiểu liệt kê mạnh mẽ và do đó được sử dụng với LINQ. Ví dụ:
ControlCollection col = ...
var query = col.Cast<Control>().Where(x => ...);
Theo mặc định, Microsoft sẽ thực hiện các việc này IEnumerable<T>
. Tôi đoán là không có ở đây. Lý do tại sao làm như vậy là một thay đổi phá vỡ và có thể gây ra hành vi mong đợi trong mã. Thậm chí chỉ cần triển khai IEnumerable<Control>
cho ControlCollection
sẽ gây ra các thay đổi đối với độ phân giải quá tải có thể và hầu như chắc chắn sẽ phá vỡ các ứng dụng của người dùng.
Lý do cho điều này là: Các bộ sưu tập mà không thực hiện IEnumerable<T>
hoặc IQueryable, không thể được lặp trong LINQ
phải là IEnumerable
Vâng, tất cả các bộ sưu tập hiện thực hiện IEnumerable (nếu không bạn sẽ không thể lặp lại chúng). Nhưng để có thể được sử dụng bởi LINQ họ sẽ phải thực hiện phiên bản chung (IEnumerable
Tôi đã đề cập đến phiên bản Chung của IEnumerable, nhưng SOF (Trình soạn thảo văn bản) sẽ không để tôi làm điều đó. Đã không nhận thấy nó sớm, đã thực hiện điều chỉnh. Dù sao cũng cảm ơn bạn –
Bạn sẽ có thể làm điều gì đó như thế này:
myDataRowCollection.Cast<DataRow>().Where.....
và sử dụng LINQ mà đường. Nếu bạn biết những gì các đối tượng trong bộ sưu tập được, sau đó bạn sẽ có thể sử dụng đó.
Đó là câu trả lời. Quên về diễn viên. Microsoft vẫn có thể thêm mạnh mẽ loại bộ sưu tập cho ControlCollection và như vậy. Cảm ơn và cảm ơn tất cả những ai đã đóng góp. –
Tại sao Microsoft không thực hiện ControlCollection như một bộ sưu tập mạnh mẽ (loại điều khiển)? – BornToCode