2013-03-01 44 views
7

Đây là một câu hỏi đơn giản (tôi hy vọng), có các phương thức chung và không chung trong các lớp sưu tập như List<T> có các phương thức như WhereWhere<T>.C# Danh sách Generic Extension Method vs Non-Generic

Ví dụ:

 List<int> numbers = new List<int>() 
     { 
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10 
     }; 

     IEnumerable<int> evens = numbers.Where((x) => 
     { 
      return x % 2 == 0; 
     }); 

     IEnumerable<int> evens2 = numbers.Where<int>((x) => 
     { 
      return x % 2 == 0; 
     }); 

Tại sao sử dụng một trong khác (Generic hoặc Non-Chung)?

Trả lời

11

Chúng là cùng một phương pháp (tài liệu here). Phần tham số kiểu sau tên phương thức (ví dụ: <int> trong trường hợp này) là tùy chọn khi trình biên dịch có thể suy ra kiểu tự động và rõ ràng từ ngữ cảnh. Trong trường hợp này, phương pháp đang được áp dụng cho đối tượng triển khai giao diện IEnumerable<int> (tức là đối tượng numbers loại List<int>) mà từ đó trình biên dịch có thể suy luận an toàn rằng tham số loại là int.

Lưu ý, cũng có, mà Where<T> thực sự là một phương pháp mở rộng trên lớp System.Linq.Enumerable mà có thể được áp dụng cho đối tượng của bất kỳ lớp thực hiện IEnumerable<T> như List<T>.

+0

Cảm ơn bạn đã giải thích rõ ràng! – infbubble

Các vấn đề liên quan