考虑属性表达式,如t => t.MyProperty
,其中t
的类型为MyClass
。如何在执行方法调用的新表达式中使用此属性表达式?使用表达式树中属性表达式的值
纯C#
:
class MyClass
{
public string MyProperty { get; set; }
}
static void Foo(string foo)
{
}
LambdaExpression GetExpression(Expression<Func<MyClass, object>> expr)
{
return expr;
}
var myClass = new MyClass();
Foo(myClass.MyProperty);
与表达
现在...?
var expr = GetExpression(m => m.MyProperty);
var mi = typeof(Program).GetMethod(nameof(Program.Foo),
BindingFlags.Public | BindingFlags.Static);
var myClass = new MyClass();
// Now what??
// var call = Expression.Call(mi, ???expr??);
// var invoke = Expression.Invoke(call, fooParameter);
我想使用的expr
结果和使用,在调用Foo
。我知道我可以通过两个步骤来完成这项工作,我打电话给expr.Compile().DynamicInvoke(myClass)
以获得价值,但这是而不是我在这里要求的。
我想构建一个表达式,它需要一个属性getter表达式,然后执行Foo(
表达式)
的结果调用。我无法弄清楚如何使用表达式作为方法调用的参数。
目前还不清楚你试图达到什么目的。方法'Foo'采用'string';你的'Expression'产生一个'object'。你想用什么表达作为参数来调用什么方法? – dasblinkenlight
如果我理解它,你应该只能使用Expression.Call(mi,Expression.Invoke(...))'? –
这是挑战的一部分。也许需要转换。我很清楚自己想要达到的目标。对于给定的MyClass对象M,我想调用Foo(M.MyProperty)。输入是由上面的'GetExpression'方法生成的表达式。 – l33t