Array如何使用LINQ扩展方法,因为Array没有实现IEnumerable <t> interface </t>

时间:2014-10-23 06:27:29

标签: c# linq

这是我的计划:

static void Main(string[] args)
{
        int[] myArr = new int[] { 4,6,2,1};

        //call Where() linq method
        var myEvenNumbers = myArr.Where(n => n % 2 == 0 );

        Console.Read();
}

但是当我在Enumerable类

中查看Where()扩展方法的定义时
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate);

来源的类型为IEnumerable<T>

我的问题是:数组类没有实现IEnumerable<T>但是我们怎样才能在数组上使用Where()扩展方法?

2 个答案:

答案 0 :(得分:3)

数组确实实现了IEnumerable以及ICollection(及其泛型)和其他一些

foreach (var type in (new int[3]).GetType().GetInterfaces())
    Console.WriteLine(type);

可生产

enter image description here

答案 1 :(得分:3)

数组没有实现IEnumerable<T>,如果您尝试使用IEnumerable<T>并且实际输入为Array的变量,则会看到该数据。特定于类型的数组类型(如示例中的int[]执行实现IEnumerable<T>以及其他泛型类型。