作为一个新的.NET 3.5程序员,我开始学习LINQ,发现了一些我以前没有注意到的非常基本的东西:
这本书声称每个数组都实现了IEnumerable<T>(显然,否则我们不能使用LINQ来处理数组上的对象…)。当我看到此消息时,我以为自己从未真正想到过,我问自己所有其他数组还实现了什么- 因此我System.Array使用对象浏览器进行了检查 (因为它是CLR中每个数组的基类),并且令我惊讶的是,它没有实现IEnumerable<T>。
IEnumerable<T>
System.Array
所以我的问题是:定义在哪里?我的意思是,我该如何确切地知道每个数组实现哪些接口?
从文档(重点是我的):
[…] Array类实现System.Collections.Generic.IList<T>,System.Collections.Generic.ICollection<T>以及System.Collections.Generic.IEnumerable<T>通用接口。 这些实现是在运行时提供给数组的,因此对于文档构建工具而言是不可见的。
System.Collections.Generic.IList<T>
System.Collections.Generic.ICollection<T>
System.Collections.Generic.IEnumerable<T>
编辑: 正如Jb Evain在他的评论中指出的那样,只有向量(一维数组)实现了通用接口。至于 为什么 多维数组不实现通用接口,我不确定,因为它们确实实现了非通用接口(请参见下面的类声明)。
的System.Array类(即 每 阵列)也实现了这些非通用接口:
public abstract class Array : ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuralEquatable