public T this[int index]
 {
     get
     {
         if (index < 0 || index >= _base.Length)
         {
             throw new IndexOutOfRangeException();
         }
         foreach (var item in _changeLog.GetChanges())
         {
             if (item.TryGetValue(index, out T value))
             {
                 return(value);
             }
         }
         return(_base[index]);
     }
     set
     {
         _changeLog.Add(index, value);
     }
 }