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

打造可逆向排序的泛型字典類 (八 續):泛型 ICollection<KeyValuePair> 介面實作細節

     編輯:關於C語言

ICollection<KeyValuePair<TKey,TValue>> 完整成員


bool ICollection<KeyValuePair<TKey, TValue>>.IsReadOnly => false;

void ICollection<KeyValuePair<TKey, TValue>>.Add(KeyValuePair<TKey, TValue> kvp)
    => Add(kvp.Key, kvp.Value);

bool ICollection<KeyValuePair<TKey, TValue>>.Contains(KeyValuePair<TKey, TValue> kvp)
{
    int idx = IndexOfKey(kvp.Key);
    return idx >= 0 && EqualityComparer<TValue>.Default.Equals(values[idx], kvp.Value);
}

void ICollection<KeyValuePair<TKey, TValue>>.CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex)
{
    if (array == null) throw new ArgumentNullException(nameof(array));
    if (arrayIndex < 0 || arrayIndex > array.Length) throw new ArgumentOutOfRangeException(nameof(arrayIndex));
    if (array.Length - arrayIndex < Count) throw new ArgumentException("ArrayPlusOffTooSmall");
    for (int i = 0; i < Count; i++)
        array[arrayIndex + i] = new KeyValuePair<TKey, TValue>(keys[i], values[i]);
}

bool ICollection<KeyValuePair<TKey, TValue>>.Remove(KeyValuePair<TKey, TValue> kvp)
{
    int idx = IndexOfKey(kvp.Key);
    if (idx >= 0 && EqualityComparer<TValue>.Default.Equals(values[idx], kvp.Value))
    { RemoveAt(idx); return true; }
    return false;
}

泛型版本較非泛型簡潔,直接操作強型別陣列。EqualityComparer<TValue>.Default 正確處理 null 與值型別比較。此節完成泛型集合介面實作,類別現可無縫用於 LINQ、資料繫結等現代 API。

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