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

4 投票
2 回答
929 浏览
提问于 2025-04-15 19:48

我在.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”方法的声明来实现这个?或者我应该使用什么其他解决方案?

谢谢

2 个回答

1

根据这个常见问题解答,你定义的MyHelper.exec应该可以接受一个array作为第二个参数,或者在第一个string后面接受任意数量的objects

如果你调用这个助手的例子没有按预期工作,那可能是IronPython解释器的一个限制,可能需要报告为一个bug。不过在报告之前,请先创建一个简单可运行的C#脚本,展示你想要做的事情(显示它在C#中是如何按预期工作的),以及一个尝试做同样事情但失败的IronPython脚本。这将对解决问题非常有帮助。

与此同时,为什么不直接调用

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

呢?

3

这里的问题是“exec”在Python中是一个关键字,所以你不能把它当作函数名来用。你可以用“exec_”或者“execute”之类的名字来代替。或者你也可以这样写:

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

撰写回答