从表达式调用实例方法

时间:2015-08-20 18:23:38

标签: c# expression

我试图弄清楚如何调用Expression>中描述的实例方法。使用提供给方法的参数。

这里有一个类似的问题:How to call the method from a MethodCallExpression in c#,但它在非实例方法的上下文中运行。我的问题是:在调用它之前,如何使用适当的实例构建表达式。

void Main()
{
    Expression<Action<MyClass>> expr = x => x.SomeMethod("Nathan", 10, 1.5d); 

    // i need to provide the expression a new MyClass()

    Expression.Lambda(expr).Compile().DynamicInvoke();
}

public class MyClass 
{
    public void SomeMethod(string param1, int param2, double param3) {
        Console.WriteLine ("Hello: {0}, {1}, {2}", param1, param2, param3);
    }
}

1 个答案:

答案 0 :(得分:1)

如果您只需要调用表达式,则需要将其编译为委托,然后调用它:

Expression<Action<MyClass>> expr = x => x.SomeMethod("Nathan", 10, 1.5d); 
Action<MyClass> action = expr.Compile();

MyClass instance = new MyClass();
action(instance);