gpt4 book ai didi

c# - 反射与编译以获得 MemberExpression 的值(value)

转载 作者:太空狗 更新时间:2023-10-30 01:28:05 38 4
gpt4 key购买 nike

如何在不使用 Compile() 而仅使用正常反射的情况下实现这一点?

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 block 中的代码没有使用运行时编译来获取值。我的目标是 else block 中的代码也使用运行时编译。

最佳答案

你不能。反射是用于元数据和非常有限的字节码检查的工具。它不允许突变或代码生成。从根本上说,您在这里要实现的是元数据和 IL 生成行为。反射不适用于这种情况。

关于c# - 反射与编译以获得 MemberExpression 的值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1527363/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com