array.copy的笔记:
1、将值类型的元素装箱位引用类型的元素,比如讲一个int32[]的元素复制到object[]中
2、将引用类型的元素拆箱为值类型的元素
3、加宽clr基元值类型,比如讲一个int32[]的元素复制到一个double[]中。
4、在两个数组之间复制是,如果仅从数组类型证明不了两者的兼容性,比如从object[]转型为iformattable[],根据需要对元素进行向下类型转换。如果object[]中的每一个对象都实现了iformattable,copy方法就能成功执行。
如果只是需要把数组中的某些元素复制到另一个数组,可以选择system.buffer的blockcopy方法,它的执行速度比array的copy方法快。
所有数组都隐式派生自system.array。
所有数组痘印是实现ienumerable,icollection和ilist:因为这些接口将所有元素都视为system.object,然而,最好是让system.array都实现这些接口的泛型形式,提供更好的编译时类型安全性和更好的性能。
不过,因为涉及多维数组和非0基数组的问题,clr团队不希望system.array实现ienumerable<t>,icollection<t>和ilist<t>。同时还会维数组类型的所有基类型实现这三个接口,只要他们是引用类型。一下层次结构图对此进行了澄清:
object
array
object[]
stream[]
filestream[]所以,如果你执行以下代码:
filestream[]fsarray
clr创建filestream[]类型时,会自动为这个类型实现ienumerable<stream>,ienumerable<object>,icollection<object>,ilist<stream>和ilist<object>。
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!