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

inf*_*ble 7 c# generics collections

这是一个简单的问题(我希望),在集合类中有泛型和非泛型方法,List<T>比如具有Where和等方法Where<T>.

例:

        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;
        });
Run Code Online (Sandbox Code Playgroud)

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

Ric*_*ook 11

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

注意,也即Where<T>实际上是一个扩展方法System.Linq.Enumerable可以应用到实施任何类的对象的类IEnumerable<T>,例如List<T>.