Array.Copy的笔记:数组
一、将值类型的元素装箱位引用类型的元素,好比讲一个Int32[]的元素复制到Object[]中安全
二、将引用类型的元素拆箱为值类型的元素性能
三、加宽CLR基元值类型,好比讲一个Int32[]的元素复制到一个Double[]中。spa
四、在两个数组之间复制是,若是仅从数组类型证实不了二者的兼容性,好比从Object[]转型为IFormattable[],根据须要对元素进行向下类型转换。若是Object[]中的每个对象都实现了IFormattable,Copy方法就能成功执行。code
若是只是须要把数组中的某些元素复制到另外一个数组,能够选择System.Buffer的BlockCopy方法,它的执行速度比Array的Copy方法快。orm
全部数组都隐式派生自System.Array。对象
全部数组痘印是实现IEnumerable,Icollection和IList:由于这些接口将全部元素都视为System.Object,然而,最好是让System.Array都实现这些接口的泛型形式,提供更好的编译时类型安全性和更好的性能。blog
不过,由于涉及多维数组和非0基数组的问题,CLR团队不但愿System.Array实现IEnumerable<T>,ICollection<T>和IList<T>。同时还会维数组类型的全部基类型实现这三个接口,只要他们是引用类型。一下层次结构图对此进行了澄清:接口
Object
Array
Object[]
Stream[]
FileStream[]
因此,若是你执行如下代码:io
FileStream[]fsArray
CLR建立FileStream[]类型时,会自动为这个类型实现IEnumerable<Stream>,IEnumerable<Object>,ICollection<Object>,IList<Stream>和IList<Object>。