示例#1
0
        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);
        }
示例#2
0
        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);
        }