using System.Linq.Expressions;
public class SecretKeeper
public int Secret{get { return _secret; } set { _secret = value; }}
public static int GetSecretUsingExpressionTrees(this SecretKeeper keeper)
ParameterExpression keeperArg = Expression.Parameter(typeof(SecretKeeper), "keeper");
Expression secretAccessor = Expression.Field(keeperArg, "_secret");
var lambda = Expression.Lambda<Func<SecretKeeper, int>>(secretAccessor, keeperArg);
var func = lambda.Compile();
public static void Main()
var keeper = new SecretKeeper{Secret = 42};
Console.WriteLine(keeper.GetSecretUsingExpressionTrees());