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

时间:2013-03-01 07:38:30

标签: c# generics collections

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

为什么要使用one over other(Generic或Non-Generic)?

1 个答案:

答案 0 :(得分:11)

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

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