Как работает ObservableCollection <T>.Move(int, int)?

Я не могу представить это, прочитав документацию для ObservableCollection.Move(int oldIndex, int newIndex) в MSDN:

oldIndex Тип: System.Int32 Индекс с нулевым индексом, определяющий расположение объекта, который нужно переместить. newIndex Тип: System.Int32 нулевой индекс, определяющий новое местоположение элемента.

Я не понимаю, как это работает. Что происходит с элементом newIndex? Мое предположение состоит в том, что индекс каждого элемента с index >= newIndex уменьшается. Правильно ли это предположение? И что еще более важно, такое поведение объясняется или описывается где-то на MSDN?

Ответ 1

Позвольте мне объяснить поведение Move в форме unit test:

[Test]
public void ObservableTest()
{
    var observable = new ObservableCollection<string>{ "A", "B", "C", "D", "E"}; 

    observable.Move(1, 3); // oldIndex < newIndex 
    // Move "B" to "D" 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" 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" place: "nothing" happens
    CollectionAssert.AreEqual(new[] { "A", "B", "C", "D", "E" }, observable);
}

Ответ 2

Я хотел бы получить простое объяснение:

Объект перемещается в указанное положение, а затем все объекты в коллекции повторно индексируются с нуля и вверх.