2012-05-06 12 views
19

I nie wydają się rysunek ten jeden czytając documentation for ObservableCollection.Move(int oldIndex, int newIndex) on MSDN:Jak działa ObservableCollection <T> .Move (int, int)?

oldIndex Typ: System.Int32 Indeks Liczony od zera określająca lokalizację elementu, który ma zostać przeniesiony. newIndex Typ: System.Int32 Oparty na zera indeks określający nową lokalizację elementu.

Nie rozumiem, jak to działa. Co stanie się z przedmiotem z newIndex? Zakładam, że indeks każdej pozycji o wartości index >= newIndex jest zmniejszany. Czy to założenie jest poprawne? A co ważniejsze, czy to zachowanie jest wyjaśnione lub opisane gdzieś w witrynie MSDN?

Odpowiedz

27

Pozwól mi wyjaśnić zachowanie Move w formie testów jednostkowych:

[Test] 
public void ObservableTest() 
{ 
    var observable = new ObservableCollection<string>{ "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); 
} 
4

pójdę za proste wyjaśnienie:

Obiekt zostanie przeniesiony do wskazanej pozycji, a następnie wszystkie obiekty w kolekcji są ponownie indeksowane od zera w górę.

+3

Nie jestem pewien, dlaczego to jest głosowanie w górę. Dwie pozostałe odpowiedzi wyraźnie pokazują, że proste wyjaśnienie jest takie, że przedmiot jest usuwany, a następnie wstawiany z powrotem. –

+0

Jest oczywiste, że przedmiot został usunięty i wstawiony z powrotem, co nie wymaga złożonego testowania/testowania jednostki. Autor pytał o indeksy. Moja odpowiedź, choć nie wybrana, dotyczy tego aspektu. –

+0

Myślę, że jedyną rzeczą, która naprawdę wyjaśnia to dobrze jest komentarz Ludo powyżej. –

Powiązane problemy