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)); }
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)); }
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); }
private static bool CanShallowClonePropHelper <T>( string propName) { return(CloneCmdConfig <T> .CanShallowClone(propName)); }
private static bool CanShallowCloneFieldHelper <T>( string fieldName) { return(CloneCmdConfig <T> .CanShallowClone(fieldName)); }