public virtual void FindDifferences(object oldState, object newState, StateChanges stateChanges, int maxDepth) { values = new Dictionary <string, StateChange>(); if (oldState != null) { beingTraversed = BeingTraversed.Old; traverser.TraverseInstance(oldState, maxDepth, this); } if (newState != null) { beingTraversed = BeingTraversed.New; traverser.TraverseInstance(newState, maxDepth, this); } beingTraversed = BeingTraversed.Nothing; foreach (var kvp in values) { var change = kvp.Value; if (change.OldValue == null && change.NewValue != null) { stateChanges.Changes.Add(change); } else if (change.OldValue != null && !change.OldValue.Equals(change.NewValue)) { stateChanges.Changes.Add(change); } } }
public virtual void FindDifferences ( object oldState, object newState, StateChanges stateChanges, int maxDepth, Func <FieldInfo, IReadOnlyInstanceTraversalContext, bool> fieldIgnoreFunc = null, Func <PropertyInfo, IReadOnlyInstanceTraversalContext, bool> propertyIgnoreFunc = null ) { if (fieldIgnoreFunc == null) { fieldIgnoreFunc = (field, context) => false; } if (propertyIgnoreFunc == null) { propertyIgnoreFunc = (prop, context) => false; } fieldIgnoreFn = fieldIgnoreFunc; propertyIgnoreFn = propertyIgnoreFunc; values = new Dictionary <string, StateChange>(); if (oldState != null) { beingTraversed = BeingTraversed.Old; traverser.TraverseInstance(oldState, maxDepth, this); } if (newState != null) { beingTraversed = BeingTraversed.New; traverser.TraverseInstance(newState, maxDepth, this); } beingTraversed = BeingTraversed.Nothing; foreach (var kvp in values) { var change = kvp.Value; if (change.OldValue == null && change.NewValue != null) { stateChanges.Changes.Add(change); } else if (change.OldValue != null && !change.OldValue.Equals(change.NewValue)) { stateChanges.Changes.Add(change); } } }