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.