我如何在不使用Compile()的情况下,仅使用普通反射来实现这一点?
我希望这段代码能在iPhone上运行(使用MonoTouch),但它不允许动态编译。
更新:以下是更多上下文信息,这是我正在处理的代码:
var value = Expression.Lambda(memberExpression).Compile().DynamicInvoke();
我希望这段代码能在iPhone上运行(使用MonoTouch),但它不允许动态编译。
更新:以下是更多上下文信息,这是我正在处理的代码:
if (expression.Expression is ConstantExpression)
{
var constantExpression = (ConstantExpression)expression.Expression;
var fieldInfo = constantExpression.Value.GetType().GetField(expression.Member.Name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (fieldInfo != null)
{
return fieldInfo.GetValue(constantExpression.Value);
}
{
var propertyInfo = constantExpression.Value.GetType().GetProperty(expression.Member.Name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (propertyInfo != null)
{
return propertyInfo.GetValue(constantExpression.Value, null);
}
}
}
else
{
return Expression.Lambda(expression.Expression).Compile().DynamicInvoke();
}
正如您所看到的,if块中的代码不使用运行时编译来获取值。我的目标是else块中的代码也不使用运行时编译。