所有数组都实现了IEnumerable,ICollection,Ilist
System.Array类实现了IEnumerable,ICollection和Iist接口,但不是所有System.Array都实现上述接口的泛型形式。这是为什么呢?(用小沈阳的话说)。这是因为多维数组和非0基数组的问题,同时,为System.Array定义这些接口,会让所有数组类型启用这些接口。CLR在这上面耍了一个小花招,在创建一个一维0基数组时,CLR让该数组自动实现IEnumerable<T>,ICollection<T>,Ilist<T>.
如果这个数组是引用类型的数组,那么这个数组类型的所有基类型也都实现了这三个接口,那么这个数组的元素可以隐式转换为其基类的相应接口类型。如果数组时值类型数组,那么不会实现这些接口在System.ValueType或System.Object上的泛型版本。这是因为值类型数组在内存中的布局与引用类型的数组不同。

浙公网安备 33010602011771号