【问题标题】:How does ObservableCollection<T>.Move(int,int) work?ObservableCollection<T>.Move(int,int) 是如何工作的?
【发布时间】:2012-05-06 14:18:31
【问题描述】:

通过阅读documentation for ObservableCollection.Move(int oldIndex, int newIndex) on MSDN,我似乎无法弄清楚这一点:

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

我不明白它是如何工作的。带有newIndex 的项目会发生什么?我的假设是每个带有index &gt;= newIndex 的项目的索引都会递减。这个假设正确吗?更重要的是,这种行为是否在 MSDN 上的某处进行了解释或描述?

【问题讨论】:

    标签: c# .net collections


    【解决方案1】:

    让我以单元测试的形式解释Move的行为:

    [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);
    }
    

    【讨论】:

    • 我不明白第二种情况,Move(3, 1)。不应该是A、D、B、C、E吗?
    • 可观察的集合是可变的。所以在我的例子中,调用Move(3, 1)之前的初始状态是"A", "C", "D", "B", "E"
    【解决方案2】:

    我会寻求简单的解释:

    对象被移动到指定的位置,然后集合中的所有对象都从零开始重新索引。

    【讨论】:

    • 我不确定为什么要投票赞成。另外两个答案清楚地表明正确简单的解释是该项目被删除,然后再插入回来。
    • 很明显,该项目被删除并重新插入,不需要复杂的演示/单元测试。作者在询问索引。我的答案虽然不是选择的,但针对的是这一方面。
    • 我认为唯一能很好解释的就是上面 Ludo 的评论。
    【解决方案3】:

    除了@nemesv 中的answer 之外,帮助我记住行为的是myObservableCollection.Move(oldIndex, newIndex) 相当于:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-13
      • 1970-01-01
      • 2022-01-16
      • 2019-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多