2009-03-13 12 views

答えて

3

は辞書に付加価値型はイベントの「変更」タイプが含まれている場合は、それを購読する...そこに多くの方法がありますが、それは依存します。

値の型にこのようなイベントが含まれていないが、ソースコードを制御している場合は、イベントを追加してサブスクライブします。

値の型は、このようなイベントが含まれていない、とあなたは、ソースコードを制御するクローン化された値か何かで値のシャドウコピーを維持することを検討し、比較をしないと。

最後のケースでは、タイプを制御せずイベントを含んでいないので、あなたは何の選択もせずに残していますが、何とかそれぞれの現在の状態を記録しますその状態と比較して、変更されているかどうかを確認します。

1

IDictionaryをクラスに実装する場合は、isdirtyや他のイベントやトラッキングをオブジェクトのセッターに追加できます。しかし、オブジェクトが複雑で、オブジェクトのサブプロパティが変更されていると、物事が少しばたつくことがあります。それはあなたの使い方のコンテキストに依存します - オブジェクトが変更されたときにこれをイベントドリブンにしたいのですか、それとも知る必要がありますか?ゲッター上にある場合は、最後に取得または追加されたときのオブジェクトのハッシュをいつでもチェックできます。

0

変更カウントを値とともに保存し、変更が行われるたびに値を増やします。次に、変更カウントをチェックして、オブジェクトが変更されているかどうかを確認することができます。

0

私が理解していることは、格納された値が変更されたかどうかを知るための簡単な方法はありません。これは、私が本当に必要とする情報(私がしていること)が必要な場合は、時々値のリストを歩き、変更されたかどうかを確認する必要があることを意味します。

私はそのような影響をプロファイルする必要があります。うまくいけば私は別のスレッドで発生し、比較で非常に効率的であるように実装することができます。つまり、VをIComparableにする必要があります。

+0

これは、可能な回答ではなく、説明として元の質問に追加する必要があります。 –

2

それが参照型だ場合、私は、あなたがたIDictionaryに含まれる予定のクラスにINotifyPropertyChangedを実装します。 PropertyChangedイベントを購読するアイテムの「追加」では、アイテムの削除時に登録を解除してください。そうしないと、含まれているオブジェクトインスタンスへの参照が「リーク」します(収集されません)。

関連する問題