2011-04-16 50 views
2

我正在實現我自己的支持排序的BindingList<T>。到目前爲止,一切運行良好,但我對如何實施RemoveSortCore感到困惑。該文檔是不是很明確,只說:Sortable BindingList <T>:關於RemoveSortCore的困惑

移除與ApplySortCore應用於任何類型的,如果排序在派生類中

這是否意味着我應該恢復項目的原始順序執行?在this MSDN article出的實現只設置_isSorted爲false,實際上並沒有恢復原來的順序,這使得相當無用恕我直言...

如果我希望能夠恢復原來的秩序,我想我需要保持原始集合的副本(或者是否有更好的方法?)。但是,如果我這樣做,如何處理集合的分類修改?

  • 當覆蓋InsertItem時,我應該在未排序的副本末尾添加新項目嗎?
  • 當重寫RemoveItem時,我給出了排序後的集合中的索引。但這意味着如果我也想從未排序的集合中刪除項目,我需要找到它的原始位置,這是一個O(n)操作,而RemoveItem通常預計是一個O(1)操作。同樣的問題也適用於SetItem

你會如何處理?歡迎任何建議

回答

5

由實施者來定義這意味着什麼。最明顯的兩個選擇是:

  1. 還原列表,以原來的形式:正式例如here

  2. 刪除排序,並繼續執行,如果一個從未被應用:如MS.SqlServer.Management.Controls.SortableBindingList

  3. 使用
+0

謝謝,第一篇文章就是我一直在尋找的! – 2011-04-17 19:25:11