using System.Linq.Expressions;
public static void Main(string[] args)
Action<T, float> action = MakeAssignment<T, float>("f");
var setBool = MakeAssignment<T, bool>("b");
public static Action<T, TField> MakeAssignment<T, TField>(string fieldName)
var typeField = typeof(TField);
var fieldF = type.GetField(fieldName);
var targetExp = Expression.Parameter(type);
var valueExp = Expression.Parameter(typeField);
var l = Expression.Lambda<Action<T, TField>>(Expression.Assign(Expression.Field(targetExp, fieldF), valueExp), targetExp, valueExp);