using System.Linq.Expressions;
public delegate void Add<T>(ref T a, T b) where T : class;
public static Expression<Add<T>> BuildExpression<T>() where T : class
var a = Expression.Parameter(t.MakeByRefType(), "a");
var b = Expression.Parameter(t, "b");
return Expression.Lambda<Add<T>>(
t.GetFields().Select(f =>
Expression.AddAssign(Expression.Field(a, f), Expression.Field(b, f)))),
public static void Main()
var lambda = BuildExpression<MyClass>();
var add = lambda.Compile();
var a = new MyClass { Field1 = 10 };
var b = new MyClass { Field1 = 15 };
Console.WriteLine(a.Field1);