public object Clone(string memberName, object instance, ClonerContext context) { if (instance == null) { return(null); } object result; if (!context.VisitedDictionary.TryGetValue(instance, out result)) { if (!string.IsNullOrEmpty(memberName)) { context.PathStack.Push(memberName); } result = CreatorDelegate(instance, context); if (CopierDelegate != null) { context.VisitedDictionary[instance] = result; CopierDelegate(instance, result, context); } if (!string.IsNullOrEmpty(memberName)) { context.PathStack.Pop(); } } return(result); }
public TInstance Clone <TInstance>(TInstance instance) { #pragma warning disable RECS0017 // Possible compare of value type with 'null' if (instance == null) #pragma warning restore RECS0017 // Possible compare of value type with 'null' { return(default(TInstance)); } var context = new ClonerContext(this.Configuration); var typeCloner = this.Configuration.GetTypeCloner(instance.GetType()); var clonedInstance = typeCloner.Clone(null, instance, context); return((TInstance)clonedInstance); }