2

同じオブジェクトの 2 つのインスタンス間の相違点のリストを生成したいと考えています。問題のオブジェクト:

public class Step
{
    [DataMember]
    public StepInstanceInfo InstanceInfo { get; set; }

    [DataMember]
    public Collection<string> AdHocRules { get; set; }

    [DataMember]
    public Collection<StepDoc> StepDocs
    {...}

    [DataMember]
    public Collection<StepUsers> StepUsers
    {...}
}

私がやりたいことは、2 つのインスタンスの違いをリストするオブジェクトを返すインテリジェントな方法を見つけることです(たとえば、2 つの特定の StepDocs が追加され、1 つの特定の StepUser が削除され、1 つのルールが " Go" から "Stop" へ)。私は MD5 ハッシュの使用を検討してきましたが、このようなオブジェクトをトラバースして特定の違いのマニフェストを返す良い例を見つけることができません(それらが異なることを示すだけではありません)。

追加の背景:私がこれを行う必要がある理由は、私がサポートしている API が、クライアントが SaveStep(Step step) を実行できるようにするためです...これは、エンティティとリポジトリを使用して Step オブジェクトをデータベースに永続化するのに最適です。ただし、ステップ内の特定の要素が変更されたことを別のシステム (ワークフロー エンジン) に警告するために、この SaveStep メソッドから特定のイベント (このユーザーが追加されたなど) を発生させる必要があります。ありがとうございました。

4

2 に答える 2

2

削除されたアイテムと追加されたアイテムのコレクションを持つ StepDiff のような別のオブジェクトが必要になります。このようなことを行う最も簡単な方法は、古いオブジェクトと新しいオブジェクトのそれぞれからコレクションをコピーして、StepDiff が collectionOldStepDocs と collectionNewStepDocs を持つようにすることです。

短いコレクションを取得して反復し、各 StepDoc が他のコレクションに存在するかどうかを確認します。その場合は、両方のコレクションから StepDoc 参照を削除します。その後、反復が終了すると、collectionOldStepDocs には削除された stepDocs が含まれ、collectionNewStepDocs には追加された stepDocs が含まれます。

そこから、必要な方法でマニフェストを作成できるはずです。

于 2008-09-11T22:41:59.853 に答える
1

オブジェクトに IComparable インターフェイスを実装すると、必要な機能が提供される場合があります。これにより、チェックサムに頼らずにオブジェクト間の違いを特定する独自の方法が提供されます。これは、使用可能な用語で違いが何であるかを追跡するのに実際には役立ちません。そうしないと、私が知っている .NET の 2 つのユーザー オブジェクトが等しいかどうかを判断する方法がありません。Visual Studio のヘルプ ファイルまたはここに、このインターフェイスの使用例がいくつかあります。プロパティを比較し、追跡目的で使用可能な方法 (おそらくコレクションまたは辞書オブジェクト?) で値を保存するクリーンな方法で、例からいくつかのディレクティブを収集できる場合があります。

これが役に立てば幸いです、グレッグ

于 2008-09-11T14:55:49.300 に答える