From ca6bf7d7bc0904cf5af4fe2a743329fd61774ac7 Mon Sep 17 00:00:00 2001 From: Sim Tsai <13759975+SimTsai@users.noreply.github.com> Date: Fri, 15 Dec 2023 21:17:58 +0800 Subject: [PATCH] fix #656 --- src/Mapster/Adapters/ClassAdapter.cs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Mapster/Adapters/ClassAdapter.cs b/src/Mapster/Adapters/ClassAdapter.cs index cc803d8d..47aac18a 100644 --- a/src/Mapster/Adapters/ClassAdapter.cs +++ b/src/Mapster/Adapters/ClassAdapter.cs @@ -134,7 +134,7 @@ protected override Expression CreateBlockExpression(Expression source, Expressio { var destinationPropertyInfo = (PropertyInfo)member.DestinationMember.Info!; adapt = destinationPropertyInfo.IsInitOnly() - ? SetValueByReflection(destination, (MemberExpression)adapt, arg.DestinationType) + ? SetValueByReflection(member, (MemberExpression)adapt) : member.DestinationMember.SetExpression(destination, adapt); } catch (Exception e) @@ -178,19 +178,17 @@ protected override Expression CreateBlockExpression(Expression source, Expressio return lines.Count > 0 ? (Expression)Expression.Block(lines) : Expression.Empty(); } - private static Expression SetValueByReflection(Expression destination, MemberExpression adapt, - Type destinationType) + private static Expression SetValueByReflection(MemberMapping member, MemberExpression adapt) { - var memberName = adapt.Member.Name; - var typeofExpression = Expression.Constant(destinationType); + var typeofExpression = Expression.Constant(member.Destination!.Type); var getPropertyMethod = typeof(Type).GetMethod("GetProperty", new[] { typeof(string) })!; var getPropertyExpression = Expression.Call(typeofExpression, getPropertyMethod, - Expression.Constant(memberName)); + Expression.Constant(member.DestinationMember.Name)); var setValueMethod = typeof(PropertyInfo).GetMethod("SetValue", new[] { typeof(object), typeof(object) })!; var memberAsObject = adapt.To(typeof(object)); return Expression.Call(getPropertyExpression, setValueMethod, - new[] { destination, memberAsObject }); + new[] { member.Destination, memberAsObject }); } protected override Expression? CreateInlineExpression(Expression source, CompileArgument arg)