可排序的BindingList <T>:关于RemoveSortCore的混淆

Tho*_*que 2 .net c# bindinglist

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

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

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

如果我希望能够恢复原始订单,我想我需要保留原始集合的副本(或者有更好的方法吗?).但是,如果我这样做,我如何处理集合的修改?

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

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

Joh*_*len 5

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

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

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