2012-05-06 10 views
19

Io non riesco a capire questo fuori leggendo il documentation for ObservableCollection.Move(int oldIndex, int newIndex) on MSDN:Come funziona ObservableCollection <T> .Move (int, int)?

Tipo oldIndex: System.Int32 Indice in base zero che specifica la posizione dell'elemento da spostare. newIndex Tipo: System.Int32 L'indice a base zero che specifica la nuova posizione dell'elemento.

Non capisco come funziona. Cosa succede all'oggetto con newIndex? La mia ipotesi è che l'indice di ogni articolo con index >= newIndex sia decrementato. Questa supposizione è corretta? E, ancora più importante, questo comportamento è stato spiegato o descritto da qualche parte su MSDN?

risposta

27

Permettetemi di spiegare il comportamento di muoversi in una forma di una prova di unità:

[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

andrei per la semplice spiegazione:

L'oggetto viene spostato nella posizione indicata, e quindi tutti gli oggetti di raccolta vengono ri-indicizzati da zero e superiore.

+3

io non sono sicuro perché questo è stato votato in su. Le altre due risposte mostrano chiaramente che la spiegazione semplice _correct_ è che l'elemento viene rimosso e quindi inserito di nuovo. –

+0

È ovvio che l'elemento viene rimosso e inserito di nuovo, che non richiede un test di unità/dimostrazione complesso. L'autore stava chiedendo gli indici. La mia risposta, sebbene non quella scelta, prende di mira quell'aspetto. –

+0

Penso che l'unica cosa che lo spiega davvero bene è il commento di Ludo sopra. –

Problemi correlati