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); } }