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>。