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 个特定的 StepDocs,删除了 1 个特定的 StepUser,并且一个规则从“去”到“停止”)。我一直在研究使用 MD5 哈希,但我找不到任何像这样遍历对象并返回具体差异清单的好例子(不仅仅是表明它们不同)。

附加背景:我需要这样做的原因是我支持的 API 允许客户端保存步骤(步骤步骤)......这对于使用实体和存储库将步骤对象持久保存到数据库非常有用。不过,我需要从此 SaveStep 方法引发特定事件(例如添加了此用户等),以提醒另一个系统(工作流引擎)步骤中的特定元素已更改。谢谢你。

4

2 回答 2

2

您将需要一个单独的对象,例如 StepDiff,其中包含用于删除和添加项目的集合。执行此类操作的最简单方法是从每个旧对象和新对象中复制集合,以便 StepDiff 具有 collectionOldStepDocs 和 collectionNewStepDocs。

获取较短的集合并遍历它,查看每个 StepDoc 是否存在于另一个集合中。如果是这样,请从两个集合中删除 StepDoc 引用。然后,当您完成迭代时,collectionOldStepDocs 包含已删除的 stepDocs,collectionNewStepDocs 包含已添加的 stepDocs。

从那里你应该能够以任何必要的方式构建你的清单。

于 2008-09-11T22:41:59.853 回答
1

在您的对象中实现 IComparable 接口可能会为您提供所需的功能。这将为您提供一种自定义方法来确定对象之间的差异,而无需求助于校验和,这实际上无法帮助您跟踪可用术语中的差异。否则,我无法确定 .NET 中两个用户对象之间的相等性。在 Visual Studio 的帮助文件或此处的 . 您也许可以从示例中收集一些关于比较属性的干净方法的指令,并以某种可用的方式存储值以用于跟踪目的(可能是集合或字典对象?)。

希望这会有所帮助,格雷格

于 2008-09-11T14:55:49.300 回答