我有一个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#类型作为参考,但它失败了。有什么想法吗?
答案 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