ObservableCollection .Move(int,int)如何工作?

我似乎无法通过阅读MSDN上的ObservableCollection.Move(int oldIndex,int newIndex)的文档来解决这个问题:

oldIndex类型:System.Int32从零开始的索引,指定要移动的项的位置。 newIndex类型:System.Int32从零开始的索引,指定项的新位置。

我不明白它是如何工作的。 使用newIndex会对项目产生什么影响? 我的假设是index >= newIndex的每个项目的index >= newIndex递减。 这个假设是否正确? 更重要的是,在MSDN上某处解释或描述了这种行为?

让我以unit testing的forms解释Move的行为:

 [Test] public void ObservableTest() { var observable = new ObservableCollection{ "A", "B", "C", "D", "E"}; observable.Move(1, 3); // oldIndex < newIndex // Move "B" to "D"'s place: "C" and "D" are shifted left CollectionAssert.AreEqual(new[]{"A", "C", "D", "B", "E"}, observable); observable.Move(3, 1); // oldIndex > newIndex // Move "B" to "C"'s place: "C" and "D" are shifted right CollectionAssert.AreEqual(new[] { "A", "B", "C", "D", "E" }, observable); observable.Move(1, 1); // oldIndex = newIndex // Move "B" to "B"'s place: "nothing" happens CollectionAssert.AreEqual(new[] { "A", "B", "C", "D", "E" }, observable); } 

我会去寻找简单的解释:

将对象移动到指示的位置,然后将集合中的所有对象从零开始重新编制索引。

除了@nemesv的好答案 ,有助于我记住行为的是myObservableCollection.Move(oldIndex, newIndex)相当于:

 var movedItem = myObservableCollection[oldIndex]; myObservableCollection.RemoveAt(oldIndex); myObservableCollection.Insert(newIndex, movedItem);