public void Add(K k, V v) { if (ContainsKey(k)) { throw new ArgumentException(); } if (Count >= MaxSize) { var last = m_list.Last; if (Ut.TraceLevel > 2) { Debug.Print("RemovingFromLru: {0}", last.Value); } base.Remove(last.Value); m_list.Remove(last); } var item = new LruItem <K, V>() { m_node = m_list.AddFirst(k), m_value = v }; base.Add(k, item); }
public new V this[K k] { get { var item = base[k]; UpNode(item.m_node); return(item.m_value); } set { if (ContainsKey(k)) { var node = base[k].m_node; var newItem = new LruItem <K, V>() { m_node = node, m_value = value }; base[k] = newItem; UpNode(node); } else { Add(k, value); } } }