Example #1
0
        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);
        }
Example #2
0
        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));
                }
            }
        }
Example #3
0
 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);
     }
 }