作为一个新的.NET3.5程序员,我开始学习LINQ,我发现了一些我以前没有注意到的非常基本的东西:
这本书声称每个数组实现IEnumerable<T>
(显然,否则我们不能使用LINQ来实现数组上的对象…).当我看到这一点时,我想我从来没有真正想过这一点,我问自己所有数组还实现了什么——所以我判断了一下
所以我的问题是:定义在哪里?我的意思是,我怎么才能确切地说出每个数组实现了哪些接口呢?
作为一个新的.NET3.5程序员,我开始学习LINQ,我发现了一些我以前没有注意到的非常基本的东西:
这本书声称每个数组实现IEnumerable<T>
(显然,否则我们不能使用LINQ来实现数组上的对象…).当我看到这一点时,我想我从来没有真正想过这一点,我问自己所有数组还实现了什么——所以我判断了一下
所以我的问题是:定义在哪里?我的意思是,我怎么才能确切地说出每个数组实现了哪些接口呢?
从documentation(我的重点):
[.]Array类实现
System.Collections.Generic.IList<T>
、System.Collections.Generic.ICollection<T>
和System.Collections.Generic.IEnumerable<T>
通用接口.The implementations are provided to arrays at run time, and therefore are not visible to the documentation build tools.
EDIT:正如Jb Evain在 comments 中指出的,只有向量(一维数组)实现了通用接口.至于why个多维数组没有实现泛型接口,我不太确定,因为它们确实实现了非泛型接口(请参见下面的类声明).
System.Array
类(即every数组)还实现以下非通用接口:
public abstract class Array : ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuralEquatable