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

提交前的代码
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