2013-03-01 21 views
7

Bu basit bir soru (umarım), List<T> gibi toplama sınıflarında, Where ve Where<T> gibi yöntemlere sahip genel ve genel olmayan yöntemler vardır.C# Liste Genel Uzantı Yöntemi vs Genel Olmayan

Örnek:

 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; 
     }); 

Neden diğeri üzerinde birini kullanın (Genel veya Olmayan Jenerik)?

cevap

11

Aynı yöntemdir (belgeler here). Metodu otomatik olarak ve açık bir şekilde bağlamdan çıkarabildiğinde, yöntem adı (yani bu durumda <int>) sonrası tip parametre kısmı isteğe bağlıdır. Bu durumda, yöntem, IEnumerable<int> ara yüzünü (yani List<int> tipindeki numbers nesnesinin nesnesini uygulayan bir nesneyi) uygulayarak, derleyicinin tür parametresinin int olduğunu güvenilir bir şekilde çıkarabildiği bir yöntem uygulanır.

Not, aynı zamanda, bu Where<T> aslında IEnumerable<T> örneğin List<T> olarak uygulanması, herhangi bir sınıf nesneler uygulanabilir System.Linq.Enumerable sınıf bir uzantısı yöntemi olup.

+0

Net açıklamalar için teşekkürler! – infbubble