@@ -129,7 +129,18 @@ protected override Expression CreateBlockExpression(Expression source, Expressio
129129                    } 
130130                    else 
131131                    { 
132-                         adapt  =  member . DestinationMember . SetExpression ( destination ,  adapt ) ; 
132+                         //Todo Try catch block should be removed after pull request approved 
133+                         try 
134+                         { 
135+                             var  destinationPropertyInfo  =  ( PropertyInfo ) member . DestinationMember . Info ! ; 
136+                             adapt  =  destinationPropertyInfo . IsInitOnly ( ) 
137+                                 ?  SetValueByReflection ( destination ,  ( MemberExpression ) adapt ,  arg . DestinationType ) 
138+                                 :  member . DestinationMember . SetExpression ( destination ,  adapt ) ; 
139+                         } 
140+                         catch  ( Exception  e ) 
141+                         { 
142+                             adapt  =  member . DestinationMember . SetExpression ( destination ,  adapt ) ; 
143+                         } 
133144                    } 
134145                } 
135146                else  if  ( ! adapt . IsComplex ( ) ) 
@@ -146,6 +157,7 @@ protected override Expression CreateBlockExpression(Expression source, Expressio
146157                        tuple  =  Tuple . Create ( new  List < Expression > ( ) ,  body ) ; 
147158                        conditions [ member . Ignore . Condition ]  =  tuple ; 
148159                    } 
160+ 
149161                    tuple . Item1 . Add ( adapt ) ; 
150162                } 
151163                else 
@@ -166,6 +178,21 @@ protected override Expression CreateBlockExpression(Expression source, Expressio
166178            return  lines . Count  >  0  ?  ( Expression ) Expression . Block ( lines )  :  Expression . Empty ( ) ; 
167179        } 
168180
181+         private  static   Expression  SetValueByReflection ( Expression  destination ,  MemberExpression  adapt , 
182+             Type  destinationType ) 
183+         { 
184+             var  memberName  =  adapt . Member . Name ; 
185+             var  typeofExpression  =  Expression . Constant ( destinationType ) ; 
186+             var  getPropertyMethod  =  typeof ( Type ) . GetMethod ( "GetProperty" ,  new [ ]  {  typeof ( string )  } ) ! ; 
187+             var  getPropertyExpression  =  Expression . Call ( typeofExpression ,  getPropertyMethod , 
188+                 Expression . Constant ( memberName ) ) ; 
189+             var  setValueMethod  = 
190+                 typeof ( PropertyInfo ) . GetMethod ( "SetValue" ,  new [ ]  {  typeof ( object ) ,  typeof ( object )  } ) ! ; 
191+             var  memberAsObject  =  adapt . To ( typeof ( object ) ) ; 
192+             return  Expression . Call ( getPropertyExpression ,  setValueMethod , 
193+                 new [ ]  {  destination ,  memberAsObject  } ) ; 
194+         } 
195+ 
169196        protected  override  Expression ?  CreateInlineExpression ( Expression  source ,  CompileArgument  arg ) 
170197        { 
171198            //new TDestination { 
0 commit comments