如何将列表从C#传递给Ironpython作为函数的输入参数

时间:2013-11-07 07:47:38

标签: c# marshalling ironpython

我有一个 Python 脚本,我在 C#代码( Ironpython )中使用它,它运行正常。另外,我想在 Python 脚本中为我的函数添加一个列表作为输入参数。

我从C#WinForm中获取了一些字符串,我将其格式化为Python代码:

string code = "list [a, b, c, d]";

我的额外C#代码:

ScriptSource source = m_engine.CreateScriptSourceFromString(code);
dynamic script = m_engine.ExecuteFile(@"path to my file");
dynamic function = script.UpdateElements(source);

但后来我得到以下异常:

  

迭代ScriptSource类型的非序列

在我的Python文件中,我有一个这样的函数(其中source是一个列表):

def UpdateElements(source):
   #do some stuff

所以我的问题是:如何在Python脚本中将C#中的字符串列表作为输入传递给我的函数?

1 个答案:

答案 0 :(得分:3)

将字符串列表设为

var code = "['a', 'b', 'c', 'd']";

您可以执行此列表文字源来检索IronPython列表:

dynamic result = source.Execute();

此列表可用于调用函数:

dynamic function = script.UpdateElements(result);

作为替代方案(如果文字字符串列表只是一种解决方法,并且您具有其他形式的实际值),您还可以为IronPython函数提供.NET集合,并且适用于许多场景:

var data = new[] { "a", "b", "c", "d" };
var engine = Python.CreateEngine();
dynamic script = engine.ExecuteFile(@"script.py");
dynamic function = script.UpdateElements(data);