public ObjectComparer(IDeepComparer valueComparer, Type type) { propertyAccessors = type.GetPublicProperties() .Where(x => x.CanRead) .Where(x => x.GetCustomAttribute <IgnoreEqualsAttribute>() == null) .Select(x => new PropertyAccessor(x.DeclaringType !, x)) .ToArray(); this.valueComparer = valueComparer; }
/// <summary> /// Executes the specified left. /// </summary> /// <param name="left">The left.</param> /// <param name="right">The right.</param> /// <returns>CompareResults.</returns> public CompareResults Execute(object left, object right) { var retVal = new CompareResults(); if (m_Context.Visited(left, right)) { return(retVal); } m_Context.Add(left, right); retVal.Log(String.Format("Compare: {0} to {1}", left.GetType(), right.GetType())); FieldInfo[] fields = left.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); foreach (FieldInfo field in fields) { object leftValue = field.GetValue(left); object rightValue = field.GetValue(right); if (ReferenceEquals(leftValue, rightValue)) { retVal.SameInstance = true; retVal.Log(String.Format("\tCompare: {0}= {1}", field.Name, "Same Instance")); } else { IDeepComparer comparer = GetComparer(field.FieldType); CompareResults result = comparer.Process(leftValue, rightValue, m_Context); if (result.AreEqual == false) { retVal.MarkAsDifferent(); } foreach (string entry in result.Messages) { retVal.Log(String.Format("\t{0}\t{1}", field.Name, entry)); } retVal.Log(String.Format("\tCompare: {0}= {1}", field.Name, result.AreEqual ? "Match" : "Different")); } } return(retVal); }
public CollectionComparer(IDeepComparer itemComparer, PropertyAccessor?sizeProperty) { this.itemComparer = itemComparer; this.sizeProperty = sizeProperty; }
public DictionaryComparer(IDeepComparer comparer) { this.comparer = new CollectionExtensions.KeyValuePairComparer <TKey, TValue>( new DeepEqualityComparer <TKey>(comparer), new DeepEqualityComparer <TValue>(comparer)); }
public ArrayComparer(IDeepComparer itemComparer) { this.itemComparer = itemComparer; }
public DeepEqualityComparer(IDeepComparer?comparer = null) { this.comparer = comparer ?? SimpleEquals.Build(typeof(T)); }
public SetComparer(IDeepComparer comparer) { equalityComparer = new DeepEqualityComparer <T>(comparer); }