C#列表通用扩展方法与非通用扩展方法

这是一个简单的问题(我希望),像List这样的集合类中有generics和非generics方法,它们具有WhereWhere

例:

  List numbers = new List() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; IEnumerable evens = numbers.Where((x) => { return x % 2 == 0; }); IEnumerable evens2 = numbers.Where((x) => { return x % 2 == 0; }); 

为什么要使用一个(通用或非通用)?

它们是相同的方法(文档在这里 )。 方法名称后面的类型参数部分(在本例中为 )是可选的,当编译器能够自动且明确地从上下文推断类型时。 在这种情况下,该方法应用于实现接口IEnumerable的对象(即List类型的对象numbers ),编译器可以从中安全地推断出类型参数为int

另请注意, Where实际上是System.Linq.Enumerable类的扩展方法 ,可以应用于实现IEnumerable的任何类的对象,例如List