1. I prefer alias CellList = Cell[]; over alias Cell[] CellList;
2. Do you really need to create a complete new CellList for every single removal? If so, you'd know the size of the new list in advance and can allocate it directly at the correct size.
I get the impression that you think Cell[] is a linked list but it's an array slice.