using System.Linq.Expressions;
public static void Main()
public int Age { get; set; }
Expression<Func<Person, int>> expression = p => p.Age;
MemberExpression member = (MemberExpression)expression.Body;
Console.WriteLine(member.Member.Name);
Console.WriteLine(member.Member);
Type personType = member.Expression.Type;
public static class Utilities {
public static int Compile(MemberExpression member, ParameterExpression parameter, Person p){
Expression<Func<Person, int>> lambda = Expression.Lambda<Func<Person, int>>(member, parameter);
Console.WriteLine(lambda);
return lambda.Compile().Invoke(p);
public static int Compile(MemberExpression member){
Expression<Func<int>> lambda = Expression.Lambda<Func<int>>(member);
Console.WriteLine(lambda);
return lambda.Compile().Invoke();