之间有什么区别
var propertyResolver = Expression.Lambda<Func<Person, object>>(expr, arg).Compile();
string name = (string)propertyResolver(p);
和
var propertyResolver = Expression.Lambda(expr, arg).Compile();
string name = (string)propertyResolver(p);
在第二种情况下,有某种“无类型”代表。
那是什么?编辑:
ParameterExpression arg = Expression.Parameter(p.GetType(), "x");
Expression expr = Expression.Property(arg, "Name");
答案 0 :(得分:1)
第一个代码是对Expression.Lambda<TDelegate>
的调用,该调用返回Expression<TDelegate>
,其Compile()
方法返回TDelegate
。因此,您的propertyResolver
类型为Func<Person, Object>
。
第二个代码是对非通用Expression.Lambda
方法的调用,该方法返回LambdaExpression
。这有Compile()
方法只返回Delegate
。因此,您的propertyResolver
类型为Delegate
- 这就是propertyResolver(p)
无法编译的原因。