public override void RemoveAt(int index)
        {
            TData dataToRemove = _datas[index];

            _datas.RemoveAt(index);
            OnCollectionContentRemoved?.Invoke(dataToRemove);
        }
        public override void Remove(TKey key)
        {
            TValue valueToRemove = _dictionary[key];

            _dictionary.Remove(key);
            OnCollectionContentRemoved?.Invoke(new KeyValuePair <TKey, TValue>(key, valueToRemove));
        }
 public override void Remove(TData value)
 {
     if (!_datas.Contains(value))
     {
         throw new ArgumentException();
     }
     while (_datas.Contains(value))
     {
         _datas.Remove(value);
     }
     OnCollectionContentRemoved?.Invoke(value);
 }