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);
}
}就是不让编译,怎么回事?
{
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);
}
}就是不让编译,怎么回事?
Expression body = Expression.Property(param, "id");
=>
var param = Expression.Parameter(typeof(AAA), "x");
var body = Expression.Property(param, "id");
=>
ParameterExpression param = Expression.Parameter(typeof(AAA), "x");
错误 2 参数“2”: 无法从“System.Linq.Expressions.Expression”转换为“System.Linq.Expressions.ParameterExpression[]” 所以直接
Expression<Func<AAA, int>> lambda = (Expression<Func<AAA, int>>)Expression.Lambda(body, (ParameterExpression)param);
也可以
难道楼主想手动模拟编译器行为?