2013-03-01 103 views
7

這是一個簡單的問題(我希望),像List<T>這樣的集合類中有泛型和非泛型方法,它們的方法如WhereWhere<T>C#列表泛型擴展方法vs非泛型

例子:

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

爲什麼使用了另一種(通用或者非通用)?

回答

11

它們是相同的方法(文檔here)。當編譯器能夠根據上下文自動且明確地推斷出類型時,方法名稱後面的類型參數部分(在這種情況下爲<int>)是可選的。在這種情況下,該方法被應用於實現接口IEnumerable<int>(即類型List<int>的對象numbers)的對象,編譯器可以從中安全地推斷出類型參數是int

注意,也即實際上Where<T>是在其上可以應用到實施IEnumerable<T>List<T>任何類的對象的類System.Linq.Enumerable一個擴展方法

+0

感謝您的明確解釋! – infbubble 2013-03-01 15:41:32