Exemplo n.º 1
0
        /// <summary>
        /// Comparers <paramref name="obj1"/> and <paramref name="obj2"/>.
        /// </summary>
        /// <param name="obj1">Object 1.</param>
        /// <param name="obj2">Object 2.</param>
        /// <param name="settings">Instance of <see cref="ComparisonSettings"/> class.</param>
        /// <returns>true if the objects are considered equal; otherwise, false.</returns>
        public bool Compare(object obj1, object obj2, ComparisonSettings settings)
        {
            IsArgumentException(obj1, nameof(obj1));
            IsArgumentException(obj2, nameof(obj2));

            return(_compareFunction((T)obj1, (T)obj2, settings));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Comparer{T}" /> class.
        /// </summary>
        /// <param name="settings">Comparison Settings.</param>
        /// <param name="parentComparer">Parent Comparer. Is used to copy DefaultValueComparer and Overrides. Null by default.</param>
        /// <param name="factory">Factory to create comparers in case of some members of the objects will need it.</param>
        public Comparer(ComparisonSettings settings = null, BaseComparer parentComparer = null, IComparersFactory factory = null)
            : base(settings, parentComparer, factory)
        {
            var properties = typeof(T).GetTypeInfo().GetProperties().Where(p =>
                                                                           p.CanRead &&
                                                                           p.GetGetMethod(true).IsPublic &&
                                                                           p.GetGetMethod(true).GetParameters().Length == 0 &&
                                                                           !p.GetGetMethod(true).IsStatic).ToList();
            var fields = typeof(T).GetTypeInfo().GetFields().Where(f =>
                                                                   f.IsPublic && !f.IsStatic).ToList();

            _members = properties.Union(fields.Cast <MemberInfo>()).ToList();
            _conditionalComparers = new List <IComparerWithCondition>
            {
                new MultidimensionalArraysComparer(Settings, this, Factory),
                new ExpandoObjectComparer(Settings, this, Factory),
                new DynamicObjectComparer(Settings, this, Factory),
                new CompilerGeneratedObjectComparer(Settings, this, Factory),
                new HashSetsComparer(Settings, this, Factory),
                new GenericEnumerablesComparer(Settings, this, Factory),
                new EnumerablesComparer(Settings, this, Factory),
                new TypesComparer(Settings, this, Factory)
            };

            // Additional value comparers
            AddComparerOverride <StringBuilder>(new ToStringComparer <StringBuilder>());
            AddComparerOverride <Uri>(new UriComparer());
        }
Exemplo n.º 3
0
 protected BaseComparer(ComparisonSettings settings, BaseComparer parentComparer, IComparersFactory factory)
 {
     Factory              = factory ?? new ComparersFactory();
     Settings             = settings ?? new ComparisonSettings();
     DefaultValueComparer = new DefaultValueComparer();
     if (parentComparer != null)
     {
         DefaultValueComparer = parentComparer.DefaultValueComparer;
         OverridesCollection.Merge(parentComparer.OverridesCollection);
     }
 }
Exemplo n.º 4
0
 protected AbstractComparer(ComparisonSettings settings, BaseComparer parentComparer, IComparersFactory factory)
     : base(settings, parentComparer, factory)
 {
 }
Exemplo n.º 5
0
 public EnumerablesComparer(ComparisonSettings settings, BaseComparer parentComparer, IComparersFactory factory)
     : base(settings, parentComparer, factory)
 {
 }
Exemplo n.º 6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Comparer" /> class.
 /// </summary>
 /// <param name="settings">Comparison Settings.</param>
 /// <param name="parentComparer">Parent Comparer. Is used to copy DefaultValueComparer and Overrides. Null by default.</param>
 /// <param name="factory">Factory to create comparers in case of some members of the objects will need it.</param>
 public Comparer(ComparisonSettings settings = null, BaseComparer parentComparer = null, IComparersFactory factory = null) : base(settings, parentComparer, factory)
 {
 }
 public HashSetsComparer(ComparisonSettings settings, BaseComparer parentComparer, IComparersFactory factory)
     : base(settings, parentComparer, factory)
 {
 }
 public EnumerablesComparer(ComparisonSettings settings, BaseComparer parentComparer, IComparersFactory factory)
     : base(settings, parentComparer, factory)
 {
     _comparer = Factory.GetObjectsComparer <T>(Settings, this);
 }
 public HashSetsComparer(ComparisonSettings settings, BaseComparer parentComparer, IComparersFactory factory)
     : base(settings, parentComparer, factory)
 {
     _comparer = new Comparer <T>(Settings, this);
 }
 public MultidimensionalArrayComparer(ComparisonSettings settings, BaseComparer parentComparer, IComparersFactory factory)
     : base(settings, parentComparer, factory)
 {
     _comparer = Factory.GetObjectsComparer <T>(Settings, this);
 }
Exemplo n.º 11
0
 public MultidimensionalArraysComparer(ComparisonSettings settings, BaseComparer parentComparer,
                                       IComparersFactory factory)
     : base(settings, parentComparer, factory)
 {
 }
 public ExpandoObjectComparer(ComparisonSettings settings, BaseComparer parentComparer, IComparersFactory factory)
     : base(settings, parentComparer, factory)
 {
 }
 /// <summary>
 /// Creates type specific comparer.
 /// </summary>
 /// <param name="type">Type.</param>
 /// <param name="settings">Comparison Settings. Null by default.</param>
 /// <param name="parentComparer">Parent comparer. Null by default.</param>
 /// <returns>Instance of <see cref="IComparer"/>.</returns>
 public IComparer GetObjectsComparer(Type type, ComparisonSettings settings = null, BaseComparer parentComparer = null)
 {
     return(new Comparer(settings, parentComparer, this));
 }
 /// <summary>
 /// Creates type specific comparer.
 /// </summary>
 /// <typeparam name="T">Type.</typeparam>
 /// <param name="settings">Comparison Settings. Null by default.</param>
 /// <param name="parentComparer">Parent comparer. Null by default.</param>
 /// <returns>Instance of <see cref="IComparer{T}"/>.</returns>
 public virtual IComparer <T> GetObjectsComparer <T>(ComparisonSettings settings = null, BaseComparer parentComparer = null)
 {
     return(new Comparer <T>(settings, parentComparer, this));
 }
Exemplo n.º 15
0
 /// <summary>
 /// Comparers <paramref name="obj1"/> and <paramref name="obj2"/>.
 /// </summary>
 /// <param name="obj1">Object 1.</param>
 /// <param name="obj2">Object 2.</param>
 /// <param name="settings">Instance of <see cref="ComparisonSettings"/> class.</param>
 /// <returns>true if the objects are considered equal; otherwise, false.</returns>
 public override bool Compare(string obj1, string obj2, ComparisonSettings settings)
 {
     return(string.Compare(obj1, obj2, StringComparison.CurrentCultureIgnoreCase) == 0);
 }
Exemplo n.º 16
0
 public CompilerGeneratedObjectComparer(ComparisonSettings settings, BaseComparer parentComparer, IComparersFactory factory)
     : base(settings, parentComparer, factory)
 {
 }