2

BindingList<T>ソートをサポートする独自のものを実装しています。これまでのところすべてうまくいっていますが、どのように実装すればよいか混乱していますRemoveSortCore。ドキュメントはあまり明確ではなく、次のように書かれているだけです:

ソートが派生クラスで実装されている場合、ApplySortCore で適用されたソートを削除します

それは、アイテムの元の順序を復元する必要があるということですか? このMSDNの記事に示されている実装は、実際には元の順序を復元せずにfalseに設定_isSortedするだけなので、私見ではまったく役に立ちません...

元の順序を復元できるようにしたい場合は、元のコレクションのコピーを維持する必要があると思います (または、より良い方法はありますか?)。しかし、そうすると、ソート中にコレクションの変更をどのように処理すればよいでしょうか?

  • をオーバーライドするときInsertItem、ソートされていないコピーの最後に新しいアイテムを追加するだけですか?
  • をオーバーライドRemoveItemすると、ソートされたコレクションのインデックスが与えられます。ただし、並べ替えられていないコレクションからもアイテムを削除する場合は、元の位置を見つける必要があります。これは、O(n) 操作RemoveItemですが、通常は O(1) 操作であると予想されます。同じ質問が にも当てはまりますSetItem

それをどのように処理しますか?どんな提案でも大歓迎です

4

1 に答える 1

5

これが何を意味するかを正確に定義するのは実装者次第です。最も明白な2つの選択肢は次のとおりです。

  1. リストを元の形式に戻します:公式の例はこちら

  2. 並べ替えを削除して、適用されたことがないかのように続行します。MS.SqlServer.Management.Controls.SortableBindingListで使用されているとおり

于 2011-04-17T18:37:18.153 に答える