首先,我必须说一整天都在寻找答案,然后再在此发布问题。我得到的最接近的答案是here,但是有些答案对我不起作用,而另一些答案太复杂了,我无法理解。 让我清楚地说明我要实现的目标:为简单起见,请考虑一下我有一个包含“ 6”个对象的列表。我在列表中随机选择一个索引,比如说myList [index = 2]。然后,我希望该对象位于列表的末尾,这意味着它的索引值现在为5。另外,我想重新排列未触及的对象,以得到相同大小的列表,而没有空的索引值。完成所有这些步骤后,它应该像这样:
目前我的代码是这样:
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[i] = list[i - 1];
}
list[newIndex] = tmp;
}
但是,您可以预测它不起作用。当我使用代码在列表中移动项目时,指向该列表中的gameobjects的Debug.DrawLine向我显示了我添加的两个对象:一个myList [0]和一个myList [5]。其他行之后消失。
答案 0 :(得分:4)
您太想了。
var value = list[index];
list.RemoveAt(index);
list.Add(value);