C# Kellerman Compare.NET对象:比较具有不同属性名称的不同类型的对象

C# Kellerman Compare.NET对象:比较具有不同属性名称的不同类型的对象,c#,compare,C#,Compare,我正在比较两个不同类型的对象,它们的属性名称不同。例如,我有一个foo.姓氏,我想和bar.Lastname进行比较 有没有办法创建一个映射(比如在ComparisonConfig中),这样我就可以告诉比较器这两个属性是相同的 我可以将有问题的属性添加到忽略列表中,然后对该属性进行手动比较,但创建映射似乎会更整洁。某种程度上,我不确定这是否适用于您的要求。如果您的foo和bar类都共享一个键,那么这将起作用: var spec0 = new Dictionary<Type, IEn

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

有没有办法创建一个映射(比如在ComparisonConfig中),这样我就可以告诉比较器这两个属性是相同的


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

某种程度上,我不确定这是否适用于您的要求。如果您的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);
var spec0=newdictionary();
添加(typeof(ChildType),新字符串[]{“ChildKeyName”});
添加(typeof(ParentType),新字符串[]{“ParentKeyName”});
List spec1=新列表();
spec1.添加(typeof(ParentType));
规范1.添加(类型(儿童类型));
CompareLogic.Config.IgnoreCollectionOrder=true;
CompareLogic.Config.ClassTypesToInclude=spec1;
CompareLogic.Config.CollectionMatchingSpec=spec0;
basicComparison.Config.MaxDifferences=int.MaxValue;
ComparisonResult=基本比较。比较(新对象、旧对象);

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