class AAA
{
    public int id { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        var aaa = new AAA();
        aaa.id = 123;
        Expression param = Expression.Parameter(typeof(AAA), "x");
        Expression body = Expression.Property(param, "id");
        Expression<Func<AAA, int>> lambda = (Expression<Func<AAA, int>>)Expression.Lambda(body, param);
        var x = lambda.Compile().Invoke(aaa);
        Console.WriteLine(x);
    }
}就是不让编译,怎么回事?

解决方案 »

  1.   

    Expression param = Expression.Parameter(typeof(AAA), "x");
    Expression body = Expression.Property(param, "id");
    =>
    var param = Expression.Parameter(typeof(AAA), "x");
    var body = Expression.Property(param, "id");
      

  2.   

     Expression param = Expression.Parameter(typeof(AAA), "x");
    =>
    ParameterExpression param = Expression.Parameter(typeof(AAA), "x");
      

  3.   

    这2个都可以,你的错误如下:
    错误 2 参数“2”: 无法从“System.Linq.Expressions.Expression”转换为“System.Linq.Expressions.ParameterExpression[]” 所以直接 
    Expression<Func<AAA, int>> lambda = (Expression<Func<AAA, int>>)Expression.Lambda(body, (ParameterExpression)param);
    也可以
      

  4.   

    Expression<Func<AAA, int>> lambda = x => x.id;
    难道楼主想手动模拟编译器行为?