Ejemplo n.º 1
0
        public void FieldByRegistration()
        {
            var type = typeof(Test9_class);

            Assert.False(CloneCmdConfig <Test9_class> .CanShallowClone(x => x.FieldOne));
            CloneCmdConfig <Test9_class> .ShallowClone(x => x.FieldOne);

            Assert.True(CloneCmdConfig <Test9_class> .CanShallowClone(x => x.FieldOne));
        }
Ejemplo n.º 2
0
        public void PropertyByRegistration()
        {
            var type = typeof(Test10_class);

            Assert.False(CloneCmdConfig <Test10_class> .CanShallowClone(x => x.PropOne));
            CloneCmdConfig <Test10_class> .ShallowClone(x => x.PropOne);

            Assert.True(CloneCmdConfig <Test10_class> .CanShallowClone(x => x.PropOne));
        }
Ejemplo n.º 3
0
        public static BlockExpression GetMemberAssignments <T>(
            ParameterExpression source,
            ParameterExpression target,
            ParameterExpression context)
        {
            List <Expression> expressions = new List <Expression>();

            foreach (var field in CloneCmdConfig <T> .GetFields())
            {
                var memberType = field.Type;
                var memberInfo = field.FieldInfo;

                var cloneExpression = field.CanShallowClone()
                    ? Expression.MakeMemberAccess(source, memberInfo)
                    : (Expression)GetSafeClone(memberType, Expression.MakeMemberAccess(source, memberInfo),
                                               context);

                expressions.Add(Expression.Assign(
                                    Expression.MakeMemberAccess(target, memberInfo),
                                    cloneExpression));
            }

            foreach (var prop in CloneCmdConfig <T> .GetProperties())
            {
                var memberType = prop.Type;
                var memberInfo = prop.HasBackingField ?
                                 prop.BackingField.FieldInfo :
                                 (MemberInfo)prop.PropertyInfo;

                var cloneExpression = prop.CanShallowClone()
                    ? Expression.MakeMemberAccess(source, memberInfo)
                    : (Expression)GetSafeClone(memberType, Expression.MakeMemberAccess(source, memberInfo), context);

                expressions.Add(Expression.Assign(
                                    Expression.MakeMemberAccess(target, memberInfo),
                                    cloneExpression));
            }

            return(expressions.Count > 0 ?
                   Expression.Block(expressions) :
                   null);
        }
Ejemplo n.º 4
0
 private static bool CanShallowClonePropHelper <T>(
     string propName)
 {
     return(CloneCmdConfig <T> .CanShallowClone(propName));
 }
Ejemplo n.º 5
0
 private static bool CanShallowCloneFieldHelper <T>(
     string fieldName)
 {
     return(CloneCmdConfig <T> .CanShallowClone(fieldName));
 }