Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Ironpython在2D数组上执行Ref/Out_C#_Clr_Ironpython - Fatal编程技术网

C# 使用Ironpython在2D数组上执行Ref/Out

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的东西,在需要传递强类型对象的情况下使用它们似乎相当简单

我有一个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]

而且似乎很好。问题来自数据表数组。我不知道用什么语法告诉它我的强类型对象是一个双精度数组。它给出的错误告诉我它需要一个类型为
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只获得一个对象,它可以通过它的两个公开属性从中访问数据,这是有道理的。我会试试看是否有人有直接的解决方案。