using System.Linq.Expressions;
Increment((MyClass x) => x.MyProp1, c);
Increment((MyClass x) => x.MyProp1, c);
Increment((MyClass x) => x.MyProp1, c);
Increment((MyClass x) => x.MyProp2, c);
Console.WriteLine($"MyClass Prop1: {c.MyProp1}");
Console.WriteLine($"MyClass Prop2: {c.MyProp2}");
int Increment<T>(Expression<Func<T, object>> expression, T obj)
var member = expression.Body as MemberExpression ?? (expression.Body as UnaryExpression)?.Operand as MemberExpression;
if (member?.Member is not PropertyInfo propertyInfo)
throw new ArgumentException("Action must be a member expression.");
var value = (int)propertyInfo.GetValue(obj);
propertyInfo.SetValue(obj, value + 1);