2012-05-06 15 views
19

Iはdocumentation for ObservableCollection.Move(int oldIndex, int newIndex) on MSDNを読み取ることによって、これを把握することができないよう:ObservableCollection <T> .Move(int、int)はどのように機能しますか?

oldIndex型:移動するアイテムの 位置を特定可能System.Int32ゼロベースのインデックス。 newIndex型:System.Int32 アイテムの新しい場所を指定する0から始まるインデックスです。

どのように動作するのか分かりません。 newIndexの商品はどうなりますか?私の仮定は、index >= newIndexの各項目のインデックスが減分されるということです。その仮定は正しいのでしょうか?さらに重要なのは、その動作がMSDNのどこかで説明されているか記述されているかどうかです。私は、簡単な説明のために行くだろう

答えて

27

は、私はユニットテストの形で移動の動作を説明してみましょう:

[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

オブジェクトが位置に移動されるが示され、その後、コレクション内のすべてのオブジェクトはゼロとアップから再インデックス化されています。

+3

私は、これはアップ投票されている理由はわかりません。他の2つの答えは、_correct_簡単な説明は、アイテムが削除されてから挿入されることを明確に示しています。 –

+0

アイテムが取り除かれて挿入されていることは明らかです。複雑なデモ/ユニットテストは必要ありません。著者は索引について尋ねていた。私の答えは、選ばれたものではありませんが、その側面をターゲットにしています。 –

+0

本当にうまく説明できるのは、上記のLudoのコメントだけです。 –

関連する問題