System.Array没有实现IEnumerable <T>,但仍然可以使用LINQ扩展方法吗?

时间:2019-06-07 03:47:51

标签: c# .net linq

我的课本说:

LINQ查询表达式可用于遍历实现通用IEnumerable接口的数据容器。但是,.NET System.Array类类型(用于表示字符串数组和整数数组)不能实现此协定

// The System.Array type does not seem to implement the correct
// infrastructure for query expressions!
public abstract class Array : ICloneable, IList, ICollection,IEnumerable, IStructuralComparable, IStructuralEquatable
{
 ...
}

虽然System.Array不直接实现IEnumerable接口,但它通过静态System.Linq.Enumerable类类型间接获得了该类型(以及许多其他以LINQ为中心的成员)所需的功能

我有点困惑。由于Array基类是抽象类,因此我们只能将派生实例创建为;

int[] i;   //implement IEnumerable<int>
string[] s; //implement IEnumerable<string>

那些[]类确实实现IEnumerable,这就是为什么我们可以在System.Linq.Enumerable类类型下使用扩展方法,不是吗?为什么教科书的意思是“通过静态System.Linq.Enumerable间接获得所需的功能”

P.S我知道[]实现IEnumerable,实际上我之前曾问过一个问题。我只想知道是什么让System.Array可以访问System.Linq.Enumerable上的扩展方法?

0 个答案:

没有答案