public static Action <TTarget, TProperty> BuildSetter <TTarget, TProperty>(PropertyInfo property) { // TODO: Make sure the property belongs to TTarget if (property is null) { throw new ArgumentNullException(nameof(property)); } if (property.PropertyType != typeof(TProperty)) { throw new InvalidOperationException(); } var targetExpr = Expression.Parameter(typeof(TTarget)); var valueExpr = Expression.Parameter(typeof(TProperty)); var setterExpr = ExpressionHelpers.BuildSetterExpression(targetExpr, property, valueExpr); return(Expression.Lambda <Action <TTarget, TProperty> >(setterExpr, targetExpr, valueExpr) .Compile()); }
public static Action <TTarget, TField> BuildSetter <TTarget, TField>(FieldInfo field) { // TODO: Make sure the field belongs to TTarget if (field is null) { throw new ArgumentNullException(nameof(field)); } if (field.FieldType != typeof(TField)) { throw new InvalidOperationException(); } var targetExpr = Expression.Parameter(typeof(TTarget)); var valueExpr = Expression.Parameter(typeof(TField)); var setterExpr = ExpressionHelpers.BuildSetterExpression(targetExpr, field, valueExpr); return(Expression.Lambda <Action <TTarget, TField> >(setterExpr, targetExpr, valueExpr) .Compile()); }