使用Ironpython在2D阵列上进行参考/输出

时间:2012-05-10 20:06:49

标签: c# clr ironpython

我有一个python脚本需要与C#函数进行一些通信。该函数需要三个参数,其中两个通过out关键字返回。声明看起来像这样:

RunComputation(InfoParams locInfo, out double[,] dataTable, out int numPoints){ ... }

由于Python是一种动态类型语言,因此它不知道如何处理 out 关键字。我做了一些搜索,发现了一些关于clr.StrongBox和clr.Reference的东西,在你需要传递一个强类型对象的情况下看起来相当简单。

对于numPoints参数,我可以在python代码中定义类似的东西:

 num_points = clr.Reference[int]

似乎很好。问题来自 dataTable 数组。我不知道语法告诉它我的强类型对象是一个双精度数组。它给出的错误告诉我它期望一个类型为StrongBox[Array[float]]的实例。我尝试从System中导入数组,看看我是否可以添加C#类型作为参考,但它失败了。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果您只使用out个参数,您也可以使用implicit way,即如果您没有将任何out参数传递给该方法,则它们将作为元组返回。

e.g。

d = Dictionary[str, float]()
(keyfound,value) = d.TryGetValue("b")

它也适用于ref个参数 想象一下有以下方法:

int Foo(int x, double[,] v)

你可以用这种方式调用方法:

nrows = 5
ncols = 5
array = Array.CreateInstance(float, nrows, ncols)
(x, arrayNew) = obj.Foo(3, array)

最后,array的修改值包含在arrayNew