/// <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); }
public void ObjectClonerReferenceTrackerShouldReturnNullIfItDoesNotContainsObject() { var tracker = new ObjectClonerReferenceTracker(); Assert.Null(tracker.GetEquivalentTargetObject(23)); }