示例#1
0
        /// <summary>
        /// Clone an object
        /// </summary>
        /// <typeparam name="T">Any reference type</typeparam>
        /// <param name="obj">Object to clone</param>
        /// <returns>The cloned object</returns>
        public static T Clone <T>(T obj)
        {
            if (obj == null)
            {
                return(default(T));
            }

            object objToClone = ObjectCleaner.PrepareObjectForSerialization(obj);

            var refTracker = new ObjectClonerReferenceTracker();
            var clone      = CloneImpl(objToClone.GetType())(objToClone, refTracker);

            var queryable = IQueryableCloner.GetInterfaceType(obj.GetType(), typeof(IQueryable <>));

            if (queryable != null)
            {
                var genericArgumentType = queryable.GetGenericArguments()[0];
                return((T)Deserializer.ConvertObjectToIQueryable(clone, typeof(IQueryable <>).MakeGenericType(genericArgumentType)));
            }

            return((T)clone);
        }
示例#2
0
        public void ObjectClonerReferenceTrackerShouldReturnNullIfItDoesNotContainsObject()
        {
            var tracker = new ObjectClonerReferenceTracker();

            Assert.Null(tracker.GetEquivalentTargetObject(23));
        }