C# List泛型扩展方法与非泛型方法的区别

7

这是一个简单的问题(我希望如此),在集合类中有通用和非通用方法,比如像List<T>,其中包括WhereWhere<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;
        });

为什么要使用其中之一(通用或非通用)?
1个回答

11
它们是同一种方法(文档here)。方法名后面的类型参数部分(即此处的<int>)在编译器能够从上下文中自动且明确地推断出类型时是可选的。在本例中,该方法被应用于实现接口IEnumerable<int>(即类型为List<int>的对象numbers)的对象,编译器可以安全地推断出类型参数是int
另请注意,Where<T>实际上是System.Linq.Enumerable类上的一个扩展方法,可应用于实现IEnumerable<T>的任何类的对象,例如List<T>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接