ArrayList.CopyTo 編譯通過、執行拋 InvalidCastException 或 ArrayTypeMismatchException,是經典的「盒裝/解盒型別不匹配」陷阱。
var list = new ArrayList();
list.Add(1); // int → boxed 為 object
list.Add(2);
byte[] buf = new byte[2];
list.CopyTo(buf); // 執行期錯誤!
ArrayList 內部以 object[] 儲存list.Add(1):int 被盒裝為 objectCopyTo(byte[]) 內部呼叫 Array.Copy(object[], byte[])Array.Copy 嘗試將 object[] 元素直接複製到 byte[]object[] 實際元素型別為 int(盒裝),目標為 byte。陣列協變僅支援參考型別,int → byte 屬於數值縮小轉換,陣列複製不支援隱式數值轉換
int[] src = { 1, 2 };
byte[] dst = new byte[2];
Array.Copy(src, dst, 2); // 同樣失敗:int[] → byte[] 不支援
var list = new ArrayList();
list.Add((byte)1); // 明確盒裝為 byte
list.Add((byte)2);
byte[] buf = new byte[2];
list.CopyTo(buf); // 成功:object[] 含 byte → byte[] 協變合法
var list = new List { 1, 2 };
byte[] buf = new byte[2];
list.CopyTo(buf); // 編譯期型別安全,零盒裝,效能最佳
var list = new ArrayList { 1, 2 };
byte[] buf = list.Cast().ToArray(); // LINQ 專案轉換
// 或
byte[] buf = new byte[list.Count];
for (int i=0; i
List<T>,編譯期型別安全、無盒裝開銷、效能優越Derived[] → Base[](僅參考型別),值型別陣列不支援協變此錯誤揭示了 .NET 型別系統中「盒裝值型別在陣列協變中的邊界條件」,是理解 CLR 型別安全機制的絕佳切入點。