Kellerman Compare .NET Objects:比较具有不同属性名称的不同类型的对象
Posted
技术标签:
【中文标题】Kellerman Compare .NET Objects:比较具有不同属性名称的不同类型的对象【英文标题】:Kellerman Compare .NET Objects: Comparing objects of different types with different property names 【发布时间】:2015-09-04 10:05:15 【问题描述】:我正在比较两个不同类型的对象,它们的属性名称不同。例如,我有 foo.Surname 想与 bar.Lastname 进行比较。
有什么方法可以创建一个映射(比如在 ComparisonConfig 中),以便我可以告诉比较器这两个属性是相同的吗?
我可以将有问题的属性添加到忽略列表中,然后对该属性进行手动比较,但创建映射似乎会更简洁。
【问题讨论】:
我认为 automapper 可能允许这样做:automapper.org 实际上是 automapper 让我首先想到了这一点,它具有我想要的语法,但据我所知,你不能使用 automapper 来比较对象的内容,它只允许您在对象之间复制内容(并检查映射是否有效)? Defo 为自动映射器创建一个工作,创建第三种类型,将您拥有的两种类型映射到新类型,然后比较它们? 这很聪明@bUKaneer,我没想到。它仍然没有我理想中想要的那么整洁,但如果没有办法在本地做到这一点,它很可能是答案 【参考方案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);
【讨论】:
以上是关于Kellerman Compare .NET Objects:比较具有不同属性名称的不同类型的对象的主要内容,如果未能解决你的问题,请参考以下文章
将 php 转换为 c#,将 curl 转换为 .net [关闭]
php ob_start()ob_end_flush和ob_end_clean()多级缓冲