将多个参数从IronPython传递到.NET方法

时间:2010-02-27 10:35:23

标签: c# python interop ironpython

我有一个.NET(C#)类:

public class MyHelper {
    public object exec( string script, params object[] arguments ) {
        // execute script with passed arguments in some external enviroment
    }
}

我在我的代码中使用IronPython运行时来运行python脚本,在某些情况下应该调用“exec”方法。我想以舒适的方式调用“exec”方法。类似的东西:

helper.exec( "someExternalFunction( {0}, {1}, {3} )", var01, var02, var03 )

但我不知道如何在C#中声明“exec”方法来实现这一点。在python中,我可以使用“* args”参数:

def exec( script, *args ):
    ... do something ...

我不希望在“MyHelper”类中使用单独的Python方法“exec”,因为“MyHelper”类在“一个地方”提供了复杂的功能。

我应该如何在C#中编写“exec”方法声明来实现呢?或者我应该使用其他什么解决方案?

由于

2 个答案:

答案 0 :(得分:3)

这里的问题是“exec”是Python中的关键字,因此您不能将其用作函数名称。您可以使用“exec_”或执行或类似的东西。或者你可以写:

getattr(helper,'exec')(...)

答案 1 :(得分:1)

根据this FAQ,您定义的MyHelper.exec应该同时接受array作为第二个参数,或接受第一个objects之后的任何数量的string }}

如果你的示例调用helper没有按预期调用,那可能是IronPython解释器的限制,可能需要filed as a bug。然而,在将其作为错误提交之前,请创建一个最小的可运行C#脚本来演示您正在尝试执行的操作(显示它在C#中的预期效果),以​​及尝试执行相同操作但失败的IronPython脚本。这对于使问题有效是非常宝贵的。

与此同时,为什么不打电话

helper.exec( "someExternalFunction( {0}, {1}, {3} )", [var01, var02, var03] )