參數 Array array 可能為 KeyValuePair<TKey,TValue>[] 或 object[],需雙重嘗試:
void ICollection.CopyTo(Array array, int arrayIndex)
{
if (array == null) throw new ArgumentNullException(nameof(array));
if (array.Rank != 1) throw new ArgumentException("不支援多維陣列複製");
if (array.GetLowerBound(0) != 0) throw new ArgumentException("陣列下界必須為 0");
if (arrayIndex < 0 || arrayIndex > array.Length) throw new ArgumentOutOfRangeException(nameof(arrayIndex));
if (array.Length - arrayIndex < Count) throw new ArgumentException("目標陣列空間不足");
var pairArray = array as KeyValuePair<TKey, TValue>[];
if (pairArray != null)
{
for (int i = 0; i < Count; i++)
pairArray[i + arrayIndex] = new KeyValuePair<TKey, TValue>(keys[i], values[i]);
}
else
{
var objArray = array as object[];
if (objArray == null) throw new ArgumentException("錯誤的陣列類型");
try
{
for (int i = 0; i < Count; i++)
objArray[i + arrayIndex] = new KeyValuePair<TKey, TValue>(keys[i], values[i]);
}
catch (ArrayTypeMismatchException) { throw new ArgumentException("錯誤的陣列類型"); }
}
}
嚴格驗證陣列維度、下界、容量,確保複製安全。泛型版本 ICollection<KeyValuePair>.CopyTo 見下節。