text: public override T Remove(int index){if (index == size - 1){T[] blockRef = directory[ToDirectoryIndex(index)];int blockIdx = ToBlockIndex(index);T old = blockRef[blockIdx];blockRef[blockIdx] = default(T);size--;if (0 < tailBlkIdx){tailBlkIdx--;}else{ResetTailBlock();}return old;}else{if (index < 0 || size <= index){throw new IndexOutOfRangeException(index.ToString());}else{T old = this[index];for (; index < size - 1; index++){Set(index, this[index + 1]);}Set(size - 1, default(T));size--;ResetTailBlock();return old;}}}