How do i move a list object at the end of the list while shifting back the others?

First of all i must say i have spent all my day searching my answer before i posted this question here. The closest answer i get is [here][1] but some of the answers didnt work for me while others are too complicated for me to understand.
Let me explain clearly what i want to achieve:
For simplicity lets think i have a list that consists of “6” objects. I randomly select an index in the list, lets say, myList[2]. Then i want this object to go at the end of the list meaning its index value is now 5. Also i want to re-arrange the untouched objects to get the same size of list without empty index value. After all these steps it should like this:

[136185-listorder.jpg*|136185]

At the moment my code is this:

public static void Move<T>(this List<T> list, int oldIndex, int newIndex)
	{
		if ((oldIndex == newIndex) || (0 > oldIndex) || (oldIndex >= list.Count) || (0 > newIndex) ||
			(newIndex >= list.Count)) return;
		// local variables
		var i = 0;
		T tmp = list[oldIndex];
		for (i = oldIndex+1; i < newIndex; i++)
		{
			list *= list[i - 1];*

this should do it.

public static void Move<T>(this List<T> list, int oldIndex, int newIndex)
        {
            List<T> tempList = new List<T>(list);
            T item = list[oldIndex];
            tempList.RemoveAt(oldIndex);
            list.Clear();
            int j = 0;
            for (int i = 0; i < tempList.Count + 1; i++)
            {
                list.Add(i == newIndex ? item : tempList[j]);
                j += i == newIndex ? 0 : 1;
            }
        }

edit: turns out lists already have an Insert method so this can be achived with a lot less effort.

public static void Move<T>(this List<T> list, int oldIndex, int newIndex)
        {
            T item = list[oldIndex];
            list.RemoveAt(oldIndex);
            list.Insert(newIndex, item);
        }