C# 使用Ironpython在2D数组上执行Ref/Out
我有一个python脚本,需要与C#函数进行一些通信。函数需要三个参数,其中两个通过C# 使用Ironpython在2D数组上执行Ref/Out,c#,clr,ironpython,C#,Clr,Ironpython,我有一个python脚本,需要与C#函数进行一些通信。函数需要三个参数,其中两个通过out关键字返回。声明如下所示: RunComputation(InfoParams locInfo, out double[,] dataTable, out int numPoints){ ... } 由于Python是一种动态类型语言,它不知道如何处理out关键字。我做了一些搜索,找到了一些关于clr.StrongBox和clr.Reference的东西,在需要传递强类型对象的情况下使用它们似乎相当简单
out
关键字返回。声明如下所示:
RunComputation(InfoParams locInfo, out double[,] dataTable, out int numPoints){ ... }
由于Python是一种动态类型语言,它不知道如何处理out关键字。我做了一些搜索,找到了一些关于clr.StrongBox和clr.Reference的东西,在需要传递强类型对象的情况下使用它们似乎相当简单
对于numPoints参数,我可以在python代码中定义如下内容:
num_points = clr.Reference[int]
而且似乎很好。问题来自数据表数组。我不知道用什么语法告诉它我的强类型对象是一个双精度数组。它给出的错误告诉我它需要一个类型为
StrongBox[Array[float]]
的实例。我试图从系统中导入数组,看看是否可以添加该C#type作为引用,但失败了。有什么想法吗?如果您只使用out
参数,您也可以使用,也就是说,如果您没有将任何out
参数传递给方法,它们将作为元组返回
e、 g
它也适用于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
中,如果您只使用out
参数,您也可以使用,也就是说,如果您没有将任何out
参数传递给方法,它们将作为元组返回
e、 g
它也适用于ref
参数。设想使用以下方法:
int Foo(int x, double[,] v)
您可以通过以下方式调用该方法:
nrows = 5
ncols = 5
array = Array.CreateInstance(float, nrows, ncols)
(x, arrayNew) = obj.Foo(3, array)
<> >最后,修改后的值<代码>数组/<代码>包含在<代码> ARARYNEX/<代码> /P>中,我对IrimPython编程了解不多,但也许您可以考虑添加一个C×包装器函数,该函数使用您的单个信息包参数,并返回一个包含
int numPoints
。这样,C#处理outs,IronPython只获得一个对象,它可以通过它的两个公开属性从中访问数据,这是有道理的。当我等着看是否有人有直接的解决方案时,我会给出这样的解释。我对IrimPython编程了解不多,但是也许你可以考虑添加一个Cype包装器函数,它使用你的单INFopAARS参数,并返回一个由<<代码>双[],DATABATE 和<代码> int NoNoths组成的对象。这样,C#处理outs,IronPython只获得一个对象,它可以通过它的两个公开属性从中访问数据,这是有道理的。我会试试看是否有人有直接的解决方案。