using System.Collections.Generic;
public static void Main()
var myDict = new SizedDictionary<string, string>(5);
foreach (string s in myDict.Values) {
public sealed class SizedDictionary<TKey, TValue> : Dictionary<TKey, TValue> {
private Queue<TKey> keys;
public SizedDictionary(int size) {
keys = new Queue<TKey>();
new public void Add (TKey key, TValue value) {
if (key==null) throw new ArgumentNullException();
if (keys.Count > maxSize) base.Remove(keys.Dequeue());
new public bool Remove (TKey key) {
if (key==null) throw new ArgumentNullException();
if (!keys.Contains(key)) return false;
var newQueue = new Queue<TKey>();
var thisKey = keys.Dequeue();
if (!thisKey.Equals(key)) newQueue.Enqueue(thisKey);