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

打造可逆向排序的泛型字典類 (七 又續):ICollection.CopyTo 非泛型版本完整實作

     編輯:關於C語言

非泛型 CopyTo 處理邏輯

參數 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 見下節。

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