使用对象比较器来比较C 中的复杂对象

开发人员通常必须比较代码中的复杂对象。继续阅读以了解如何使用C#及其Objects Comparer来完成它!

使用对象比较器来比较C 中的复杂对象

介绍

需要比较复杂对象的常见情况。有时对象可以包含嵌套元素,或者某些成员应该从比较中排除(自动生成的标识符,创建/更新日期等),或者某些成员可以具有自定义比较规则(不同格式的相同数据,如电话号码)。开发这个小框架是为了解决这些问题。

简而言之,Objects Comparer是一个对象 - 对象比较器,它允许开发人员逐个成员地逐个比较对象,并为某些属性,字段或类型定义自定义比较规则。

对象比较器可以被视为即用型框架或类似解决方案的起点。

Now Objects Comparer支持可枚举(数组,集合,列表),多维数组,枚举,标志和动态对象(ExpandoObject,DynamicObject和编译器生成的动态对象)。

安装

Objects Comparer可以作为NuGet包安装。

Install-Package ObjectsComparer

版本1.2中有什么新功能?

  • StringBuilder支持。
  • 设置支持。
  • Uri的支持。
  • Bug修复。

如果使用1.1版,则无需进行任何更改即可开始使用1.2版。

版本1.1中有什么新功能?

  • 动态对象支持(ExpandoObjectDynamicObject和编译器生成的动态对象)。
  • 按成员名称覆盖比较规则。
  • 按类型和按名称使用过滤器覆盖比较规则。
  • 该 DifferenceType 属性已添加到Difference 课程中。

如果使用版本1.0.x,则无需进行任何更改即可开始使用版本1.1。

有用的价值比较者

该框架包含几个自定义比较器,在许多情况下都很有用。

  • DoNotCompareValueComparer - 允许您跳过某些字段/类型。具有单例实现(DoNotCompareValueComparer.Instance)。
  • DynamicValueComparer - 将比较规则作为函数接收。
  • NulableStringsValueComparer - 空字符串和空字符串被视为相等的值。有单例实现(NulableStringsValueComparer.Instance)。
  • DefaultValueValueComparer - 允许我们将提供的值和指定类型的默认值视为相等的值(请参阅下面的示例3)。
  • IgnoreCaseStringsValueComparer - 允许我们比较字符串,忽略大小写。有一个单例实现(IgnoreCaseStringsValueComparer.Instance)。
  • UriComparer - 允许我们比较Uri对象。


分享到:


相關文章: