c#列表泛型扩展方法与非泛型扩展方法

本文关键字:方法 泛型 扩展 列表 | 更新日期: 2023-09-27 18:01:45

这是一个简单的问题(我希望),在像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;
        });

为什么使用其中一个而不是另一个(通用或非通用)?

c#列表泛型扩展方法与非泛型扩展方法

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

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