【问题标题】:Kellerman Compare .NET Objects: Comparing objects of different types with different property namesKellerman Compare .NET Objects:比较具有不同属性名称的不同类型的对象
【发布时间】:2015-09-04 10:05:15
【问题描述】:

我正在比较两个不同类型的对象,它们的属性名称不同。例如,我有 foo.Surname 想与 bar.Lastname 进行比较。

有什么方法可以创建一个映射(比如在 ComparisonConfig 中),以便我可以告诉比较器这两个属性是相同的吗?

我可以将有问题的属性添加到忽略列表中,然后对该属性进行手动比较,但创建映射似乎会更简洁。

【问题讨论】:

  • 我认为 automapper 可能允许这样做:automapper.org
  • 实际上是 automapper 让我首先想到了这一点,它具有我想要的语法,但据我所知,你不能使用 automapper 来比较对象的内容,它只允许您在对象之间复制内容(并检查映射是否有效)?
  • Defo 为自动映射器创建一个工作,创建第三种类型,将您拥有的两种类型映射到新类型,然后比较它们?
  • 这很聪明@bUKaneer,我没想到。它仍然没有我理想中想要的那么整洁,但如果没有办法在本地做到这一点,它很可能是答案

标签: c# compare


【解决方案1】:

有点,我不确定这是否适用于您的要求。如果您的 foo 和 bar 类都共享一个键,这将起作用:

    var spec0 = new Dictionary<Type, IEnumerable<string>>();
    spec0.Add(typeof(ChildType), new string[] { "ChildKeyName" });
    spec0.Add(typeof(ParentType), new string[] { "ParentKeyName"});

    List<Type> spec1 = new List<Type>();
    spec1.Add(typeof(ParentType));
    spec1.Add(typeof(ChildType));

    CompareLogic.Config.IgnoreCollectionOrder = true;

    CompareLogic.Config.ClassTypesToInclude = spec1;
    CompareLogic.Config.CollectionMatchingSpec = spec0;
    basicComparison.Config.MaxDifferences = int.MaxValue;
    ComparisonResult = basicComparison.Compare(NewObject, OldObject);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 2020-01-20
    • 2016-01-04
    • 2017-08-06
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    相关资源
    最近更新 更多