C#代码优化-OrderedDictionary删除优化

前言

在看.Net Runtime代码,看到一个提交,关于OrderedDictionary Remove小优化,代码也很简单,下面我们学习一下这个小优化.
issue描述:
OrderedDictionary Remove优化

提交前的代码

bool ICollection<KeyValuePair<TKey, TValue>>.Remove(KeyValuePair<TKey, TValue> item) =>
            TryGetValue(item.Key, out TValue? value) &&
            EqualityComparer<TValue>.Default.Equals(value, item.Value) &&
            Remove(item.Key);
//1. 通过TryGetValue 内部使用IndexOf通过key的hash快查
//2. 根据查到的值和要删除键值对的值比对,发现相等后.
//3. 才会调用Remove删除(重新查找),多了一次重新查找

提交后代码

bool ICollection<KeyValuePair<TKey, TValue>>.Remove(KeyValuePair<TKey, TValue> item)
{
    if (TryGetValue(item.Key, out TValue? value, out int index) && EqualityComparer<TValue>.Default.Equals(value, item.Value))
    {
        RemoveAt(index);
        return true;
    }

    return false;
}
//1. 重点在TryGetValue,使用TryGetValue重载(多一个参数,可以直接返回索引),在查找时,返回key的索引
//2. 在和查找项value比较相等后,直接根据索引使用RemoveAt进行删除
秋风 2026-06-07