C#传递动态方法作为参数

时间:2012-01-05 01:45:42

标签: c# dynamic delegates

所以我有一个动态对象,我想从它执行一个方法,但我需要将该方法作为参数传入。我发现没有办法做到这一点,并想知道这里是否有人可以提供帮助。

类似的东西:

public static void RunMethod(methodInTheDynamicObject)
{
    myDynamicObject.methodInTheDynamicObject();
}

3 个答案:

答案 0 :(得分:3)

我在这种情况下的偏好通常是定义一个委托:

public delegate void MyFunction(string p1, int p2);

public void Foo(MyFunction myFunction) {
    myFunction("something", 2);
}

或者你可以使用System.Reflection并传入MethodInfo并像这样使用它:

public void Foo(MethodInfo methodInfo) {
    methodInfo.Invoke(new object[] {"something", 2});
}

您可以找到有关MethodInfo.Invoke here的更多信息。他们有一些例子。但同样,代表们可能是更清洁的方式。

答案 1 :(得分:2)

我相信你想要传递代表。请参阅此处的示例:http://geekswithblogs.net/joycsharp/archive/2008/02/15/simple-c-delegate-sample.aspx

如果您需要针对运行时生成方法的硬核方法,您可以尝试:http://msdn.microsoft.com/en-us/library/exczf7b9.aspx

答案 2 :(得分:0)

我可能应该让你知道我的动态对象是Iron-Python脚本。无论如何我想通了。

public static void RunMethod(string script, string method, object[] param)
{
    try
    {
        dynamic dynamicObj = Scripts[script];
        var operations = ironPython.Operations;
        operations.InvokeMember(dynamicObj, method, param);
    }
    catch { }
}