考慮屬性表達式,如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