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

4

我有一个在.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 ...

我不想将Python方法“exec”与“MyHelper”类分开,因为“MyHelper”类提供了复杂的功能“在一个地方”。

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

谢谢


你声明 exec 方法的方式应该接受多个参数。当你尝试从 IronPython 调用它时,你遇到了什么错误? - Jason R. Coombs
错误为“错误代码:16;消息:语法错误”。 - TcKs
2个回答

3
这里的问题在于“exec”是Python中的关键字,因此您不能将其用作函数名称。您可以使用“exec_”或“execute”等其他名称。或者,您可以编写以下代码:
getattr(helper,'exec')(...)

你是对的。主要问题在于名称“exec”。 我是Python的初学者,不知道“exec”是关键字(我的错)。 谢谢! - TcKs

1
根据此FAQ,您定义的MyHelper.exec应该接受第二个参数作为array或者任意数量的在第一个string之后的objects
如果您对helper的调用未能按预期执行,那可能是IronPython解释器的限制,并且可能需要报告bug。在报告bug之前,请创建一个最小的可运行的C#脚本,演示您试图做什么(展示在C#中如何正常工作),以及尝试做同样事情但失败的IronPython脚本。这将有助于解决问题。
同时,为什么不直接调用呢?
helper.exec( "someExternalFunction( {0}, {1}, {3} )", [var01, var02, var03] )

?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接