Giter VIP home page Giter VIP logo

compare-net-objects's Introduction

Project Description

What you have been waiting for. Perform a deep compare of any two .NET objects using reflection. Shows the differences between the two objects.

Compatibility

  • Compatible with .NET Framework 4.0 and higher.
  • .NET Standard 1.3 Build Compatible with .NET Core 1.0, Mono 4.6, Xamarin.iOS 10.0, Xamarin.Mac 3.0, Xamarin.Android 7.0, Universal Windows Platform 10.0
  • .NET Standard 2.0 Build Compatible with .NET Core 2.0, Mono 5.4, Xamarin.iOS 10.14, Xamarin.Mac 3.8, Xamarin.Android 8.0, Universal Windows Platform 10.0.16299, Unity 2018.1
  • .NET Standard 2.1 Build Compatible with .NET 5, .NET 6, .NET 7, Mono 6.4, Xamarin.iOS 12.16, Xamarin.Mac 5.16, Xamarin.Android 10.0

NuGet Package

AppVeyor Status NuGet Version NuGet Downloads

http://www.nuget.org/packages/CompareNETObjects

Installation

Install with NuGet Package Manager Console

Install-Package CompareNETObjects

Install with .NET CLI

dotnet add package CompareNETObjects

Features

Feature Overview

  • Compare Children (on by default)
  • Handling for Trees with Children Pointing To Parents (Circular References)
  • Compares Publicly Visible Class Fields and Properties
  • Compares Private Fields and Properties (off by default)
  • Source code in C#
  • NUnit Test Project Included with over 275+ unit tests
  • Ability to load settings from a config file for use with powershell
  • Ability to pass in the configuration
  • Ability to save and load the configuration as json
  • Test Extensions .ShouldCompare and .ShouldNotCompare
  • Several configuration options for comparing private elements, ignoring specific elements, including specific elements.
  • Property and Field Info reflection caching for increased performance
  • Rich Differences List or simple DifferencesString
  • Difference Callback
  • Supports custom comparison for types and properties
  • ElapsedMilliseconds indicates how long the comparison took
  • Thread Safe
  • Beyond Compare Report
  • WinMerge Report
  • CSV Report
  • User Friendly Report
  • HTML Report

Options

  • Ability to IgnoreCollectionOrder to compare lists of different lengths
  • Ability to ignore indexer comparison
  • Ability to ignore types
  • Ability to ignore specific members by name or by wildcard
  • Interface member filtering
  • Ability to treat string.empty and null as equal
  • Ability to ignore string leading and trailing whitespace
  • Case insensitive option for strings
  • Ignore millisecond differences between DateTime values or DateTimeOffset values
  • Precision for double or decimal values

Supported Types

  • Anonymous Types
  • Arrays (Single, Multi-Dimensional, and Immutable)
  • Classes
  • Collections
  • DataColumn
  • DataRow
  • DataSet
  • DataTable
  • DateOnly (.NET Core 6.0 or highter)
  • DateTime
  • DateTimeOffset
  • Dictionary
  • Dynamic (Expando objects and Dynamic objects are supported)
  • Enum
  • Fields
  • Font (Windows Only)
  • Guid
  • HashSet
  • IDictionary
  • IList
  • IntPtr
  • IPEndPoint (Supported for everything except .NET Standard 1.0)
  • LinearGradient
  • List
  • Primitive Types (String, Int, Boolean, etc.)
  • Properties
  • SByte
  • StringBuilder
  • Struct
  • Timespans
  • HashSet
  • TimeOnly (.NET Core 6.0 or highter)
  • Timespan
  • Types of Type (RuntimeType)
  • URI

Limitations

  • Custom Collections with Non-Integer Indexers cannot be compared.
  • Private properties and fields cannot be compared for .NET Core 1.3. They are allowed to be compared in .NET Core 2.0 and higher.
  • When ignoring the collection order, the collection matching spec must be a property on the class. It cannot be a field or a property on a child or parent class. The property has to be a simple type.
  • COM Objects are not compared. To compare COM objects wrap their properties in a .NET Object or create a custom comparer. Also See: https://stackoverflow.com/questions/9735394/reflection-on-com-interop-objects
  • Version 4.62 and earlier used the hash code to identify objects to keep track of parents and children. In later versions the object reference is used. The reason for this change is that developers were overriding the GetHashCode. If you are overriding equals in your project with Compare .NET Objects inside, you will need to set Config.UseHashCodeIdentifier = true or it will cause a stack overflow. See this issue: https://github.com/GregFinzer/Compare-Net-Objects/issues/282. See the proper way to override equals: https://github.com/GregFinzer/Compare-Net-Objects/wiki/Overriding-Equals

Getting Started

https://github.com/GregFinzer/Compare-Net-Objects/wiki/Getting-Started

Help File

https://github.com/GregFinzer/Compare-Net-Objects/blob/master/Compare-NET-Objects-Help/Compare-NET-Objects-Help.chm?raw=true

Licensing

Compare .NET Objects is an open source project with an Ms-PL license with no commercial support. It is free to use and distribute for commercial and non-commercial purposes. Below is a link to the licensing.
https://github.com/GregFinzer/Compare-Net-Objects/wiki/Licensing

If you would like a perpetual MIT license with commercial support for a period of one year for all developers at your organization, purchase this option: https://kellermansoftware.com/products/compare-net-objects

compare-net-objects's People

Contributors

gregfinzer avatar vasar007 avatar killergege avatar igorocampos avatar rgmills avatar niaws avatar jsobell2 avatar markkharitonov avatar goyzhang avatar steviehailey-skyscanner avatar pagratios avatar mahendra25aug avatar elliotsis avatar znamenap avatar productiverage avatar raphaelsch avatar steco avatar taylorjp avatar tradioyes avatar madiganz avatar bhavishyachandra avatar dependabot[bot] avatar sergeylopatyuk avatar steinho avatar taks avatar zhyy2008z avatar floatas avatar ocoanet avatar mihasic avatar harleydk avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.