我希望得到一个属性(的获取Acessor PropertyInfo
),并将其编译成一个Func<object,object>
。 声明类型仅在运行时知道。
我当前的代码是:
public Func<Object, Object> CompilePropGetter(PropertyInfo info)
{
MethodInfo getter = info.GetGetMethod();
ParameterExpression instance = Expression.Parameter(info.DeclaringType, info.DeclaringType.Name);
MethodCallExpression setterCall = Expression.Call(instance, getter);
Expression getvalueExp = Expression.Lambda(setterCall, instance);
Expression<Func<object, object>> GetPropertyValue = (Expression<Func<object, object>>)getvalueExp;
return GetPropertyValue.Compile();
}
不幸的是,我必须把<Object,Object>
作为通用参数,因为有时我将获得的属性Type
等, typeof(T).GetProperties()[0].GetProperties()
其中第一的GetProperties()[ ]返回一个定制类型的对象,我必须反映它。
当我运行上面的代码,我得到这个错误:
Unable to cast object of type 'System.Linq.Expressions.Expression`1[System.Func`2[**CustomType**,**OtherCustomType**]]' to type 'System.Linq.Expressions.Expression`1[System.Func`2[System.Object,System.Object]]'.
所以,我能做些什么来返回Func<Object,Object>
?