Here are 4 items, with their index
0 1 2 3
K C A E
You want to move K to between A and E -- you might think position 3. You have be careful about your indexing here, because after the remove, all the indexes get updated.
So you remove item 0 first, leaving
0 1 2
C A E
Then you insert at 3
0 1 2 3
C A E K
To get the correct result, you should have used index 2. To make things consistent, you will need to send to (indexToMoveTo-1) if indexToMoveTo > indexToMove
, e.g.
bool moveUp = (listInstance.IndexOf(itemToMoveTo) > indexToMove);
listInstance.Remove(itemToMove);
listInstance.Insert(indexToMoveTo, moveUp ? (itemToMoveTo - 1) : itemToMoveTo);
This may be related to your problem. Note my code is untested!
EDIT: Alternatively, you could Sort
with a custom comparer (IComparer
) if that's applicable to your situation.