Since I couldn't find any good answers I made my own class called DuplicateDictionary for personal usage. I would like some tips to improve it.public class DuplicateDictionary<TKey, TValue>: List<KeyValuePair<TKey, TValue>>{    public DuplicateDictionary()    {    }    public DuplicateDictionary(List<KeyValuePair<TKey, TValue>> list)    {        foreach(KeyValuePair<TKey, TValue> kvp in list)        {            this.Add(kvp);        }    }    public DuplicateDictionary(Dictionary<TKey, TValue> dictionary)    {        foreach(KeyValuePair<TKey, TValue> kvp in dictionary)        {            this.Add(kvp);        }    }    public TValue this[TKey index]    {        get        {            this.ContainsKey(index);            return this[index];        }        set        {            this[index] = value;        }    }    public void Add(TKey key, TValue value)    {        this.Add(new KeyValuePair<TKey, TValue>(key, value));    }    public bool ContainsKey(TKey key)    {        foreach(KeyValuePair<TKey, TValue> kvp in this)            if(kvp.Key.Equals(key)) return true;        return false;    }}This class is useful for log things. I use it to log a calculator's past functions and numbers, and once equals is pressed, adds all the past numbers with the functions.
DuplicateDictionary - A dictionary-like class which allows duplicates
c#;dictionary