所以我有一个动态对象,我想从它执行一个方法,但我需要将该方法作为参数传入。我发现没有办法做到这一点,并想知道这里是否有人可以提供帮助。
类似的东西:
public static void RunMethod(methodInTheDynamicObject)
{
myDynamicObject.methodInTheDynamicObject();
}
答案 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 { }
}