C # передача динамического метода в качестве параметра - PullRequest
0 голосов
/ 05 января 2012

Итак, у меня есть динамический объект, и я хочу выполнить метод из него, но мне нужно, чтобы метод был передан в качестве параметра. Я не нашел способа сделать это и задавался вопросом, может ли кто-нибудь здесь помочь.

что-то вроде:

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

Ответы [ 3 ]

3 голосов
/ 05 января 2012

В этом случае я предпочитаю определять делегата:

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 здесь .У них есть несколько примеров.Но опять же, делегаты, вероятно, являются более чистым путем.

2 голосов
/ 05 января 2012

Полагаю, вы хотите передать делегата. Смотрите пример здесь: http://geekswithblogs.net/joycsharp/archive/2008/02/15/simple-c-delegate-sample.aspx

Если вам нужен хардкорный подход для методов, генерируемых во время выполнения, вы можете попробовать: http://msdn.microsoft.com/en-us/library/exczf7b9.aspx

0 голосов
/ 06 января 2012

Я, наверное, должен был сообщить, что мой динамический объект был скриптом 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 { }
}
...