首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 中 ArrayList.CopyTo() 運行錯誤的解決方法

     編輯:關於C語言

先看代碼:

ArrayList list = new ArrayList();
list.Add(1);
list.Add(2);
byte[] buf = new byte[2];
list.CopyTo(buf);

編譯通過,運行卻出錯。原因剖析:

  • ArrayList 內部用 object[] 存儲,值類型需裝箱為引用類型
  • CopyTo 內部用 Array.Copy() 實現
  • list.Add(1) 中 1 為 int,裝箱存入 object,拷貝時嘗試 int[] -> byte[] 高精度向低精度複製,失敗

等價於:

int[] a1 = new int[2] {1, 2};
byte[] a2 = new byte[2];
Array.Copy(a1, a2, 2); // 錯誤

修復:裝箱前轉為目標類型:

ArrayList list = new ArrayList();
list.Add((byte)1);
list.Add((byte)2);
byte[] buf = new byte[2];
list.CopyTo(buf); // 正常

核心教訓:ArrayList 非類型安全,CopyTo 需目標數組元素類型與存儲實際類型相容。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved