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。