private static T CloneValueAndTrack <T>(T value, ObjectClonerReferenceTracker refTracker) where T : class { var trackedValue = refTracker.GetEquivalentTargetObject(value) as T; if (trackedValue == null) { var clonedValue = ObjectCloner.Clone(value); refTracker.Track(value, clonedValue); return(clonedValue); } return(trackedValue); }
private static void CopyObjectKeyAndObjectValue <TKey, TValue>(Dictionary <TKey, TValue> source, Dictionary <TKey, TValue> clone, ObjectClonerReferenceTracker refTracker) where TKey : class where TValue : class { foreach (var kvp in source) { var clonedKey = CloneValueAndTrack(kvp.Key, refTracker); if (kvp.Value == null) { clone.Add(clonedKey, default(TValue)); } else { clone.Add(clonedKey, CloneValueAndTrack(kvp.Value, refTracker)); } } }
private static void CopyObjectKeyAndPrimitiveValue <TKey, TValue>(Dictionary <TKey, TValue> source, Dictionary <TKey, TValue> clone, ObjectClonerReferenceTracker refTracker) where TKey : class { foreach (var kvp in source) { clone.Add(CloneValueAndTrack(kvp.Key, refTracker), kvp.Value); } }