一尘不染

所有数组都在C#中实现什么接口?

c#

作为一个新的.NET 3.5程序员,我开始学习LINQ,发现了一些我以前没有注意到的非常基本的东西:

这本书声称每个数组都实现了IEnumerable<T>(显然,否则我们不能使用LINQ来处理数组上的对象…)。当我看到此消息时,我以为自己从未真正想到过,我问自己所有其他数组还实现了什么-
因此我System.Array使用对象浏览器进行了检查
(因为它是CLR中每个数组的基类),并且令我惊讶的是,它没有实现IEnumerable<T>

所以我的问题是:定义在哪里?我的意思是,我该如何确切地知道每个数组实现哪些接口?


阅读 400

收藏
2020-05-19

共1个答案

一尘不染

文档(重点是我的):

[…]
Array类实现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
2020-05-19