開發人員通常必須比較代碼中的複雜對象。繼續閱讀以瞭解如何使用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對象。
閱讀更多 愛碼農 的文章