开发人员通常必须比较代码中的复杂对象。继续阅读以了解如何使用C#及其Objects Comparer来完成它!
介绍
需要比较复杂对象的常见情况。有时对象可以包含嵌套元素,或者某些成员应该从比较中排除(自动生成的标识符,创建/更新日期等),或者某些成员可以具有自定义比较规则(不同格式的相同数据,如电话号码)。开发这个小框架是为了解决这些问题。
简而言之,Objects Comparer是一个对象 - 对象比较器,它允许开发人员逐个成员地逐个比较对象,并为某些属性,字段或类型定义自定义比较规则。
对象比较器可以被视为即用型框架或类似解决方案的起点。
Now Objects Comparer支持可枚举(数组,集合,列表),多维数组,枚举,标志和动态对象(ExpandoObject,DynamicObject和编译器生成的动态对象)。
安装
Objects Comparer可以作为NuGet包安装。
Install-Package ObjectsComparer
版本1.2中有什么新功能?
- StringBuilder支持。
- 设置支持。
- Uri的支持。
- Bug修复。
如果使用1.1版,则无需进行任何更改即可开始使用1.2版。
版本1.1中有什么新功能?
- 动态对象支持(ExpandoObject,DynamicObject和编译器生成的动态对象)。
- 按成员名称覆盖比较规则。
- 按类型和按名称使用过滤器覆盖比较规则。
- 该 DifferenceType 属性已添加到Difference 课程中。
如果使用版本1.0.x,则无需进行任何更改即可开始使用版本1.1。
有用的价值比较者
该框架包含几个自定义比较器,在许多情况下都很有用。
- DoNotCompareValueComparer - 允许您跳过某些字段/类型。具有单例实现(DoNotCompareValueComparer.Instance)。
- DynamicValueComparer - 将比较规则作为函数接收。
- NulableStringsValueComparer - 空字符串和空字符串被视为相等的值。有单例实现(NulableStringsValueComparer.Instance)。
- DefaultValueValueComparer - 允许我们将提供的值和指定类型的默认值视为相等的值(请参阅下面的示例3)。
- IgnoreCaseStringsValueComparer - 允许我们比较字符串,忽略大小写。有一个单例实现(IgnoreCaseStringsValueComparer.Instance)。
- UriComparer - 允许我们比较Uri对象。
閱讀更多 愛碼農 的文章