2

我正在实现我自己BindingList<T>的支持排序的。到目前为止一切都运行良好,但我对如何实施RemoveSortCore. 文档不是很明确,它只说:

如果在派生类中实现排序,则删除使用 ApplySortCore 应用的任何排序

这是否意味着我应该恢复项目的原始顺序?这篇 MSDN 文章中显示的实现只设置_isSorted为 false,并没有真正恢复原始顺序,这使得它非常没用恕我直言......

如果我希望能够恢复原始顺序,我想我需要维护原始集合的副本(或者有更好的方法吗?)。但是如果我这样做了,我该如何处理对集合进行排序时的修改?

  • 覆盖时InsertItem,我应该在未排序副本的末尾添加新项目吗?
  • 覆盖时RemoveItem,我得到了排序集合中的索引。但这意味着如果我还想从未排序的集合中删除该项目,我需要找到它的原始位置,这是一个 O(n) 操作,而RemoveItem通常预计是一个 O(1) 操作。同样的问题也适用于SetItem

你会怎么处理?欢迎任何建议

4

1 回答 1

5

由实施者来准确定义这意味着什么。两个最明显的选择是:

  1. 将列表还原为原始形式:此处为官方示例

  2. 删除排序并继续进行,就好像从未应用过一样:在MS.SqlServer.Management.Controls.SortableBindingList中使用

于 2011-04-17T18:37:18.153 回答