Python .net框架参考参数Double []&

Ben*_*min 4 .net python ironpython python.net

使用Python for .Net框架,我尝试从C#.dll文件调用方法。此方法具有以下参数:

public static void ExternalFunction(
    String Arg1,
    ref Double[]& Arg2,
);
Run Code Online (Sandbox Code Playgroud)

我知道.Net框架会将Python浮点数转换为双精度数。现在,我想知道如何制作一个数组(双精度)并将其作为对外部方法的引用。

我有以下代码:

import clr

clr.AddReference("MyDll")
from MyLib import MyClass

myName = "Benjamin"

r = MyClass.ExternalFunction(myName, 0.0);
print "Result: %s"%r
Run Code Online (Sandbox Code Playgroud)

igo*_*shi 5

您可以通过提供浮点列表(或元组)作为第二个参数来调用此方法。

MyClass.ExternalFunction(myName, [0.0]);
Run Code Online (Sandbox Code Playgroud)

两个虚拟机中的两个不同数据结构之间将进行转换。Python.Net将在.Net环境中将python的float列表转换为double数组,并将其通过引用传递给您的函数。对第二个参数所做的更改不会传播回python。

通过使用反射,您可以更好地控制参数封送处理。

import clr
clr.AddReference("MyDll")
import System
import MyLib

myClassType = System.Type.GetType("MyLib.MyClass, MyDll") 
method = myClassType.GetMethod("ExternalFunction")
numbersArray = System.Array[System.Double]([1.0, 2.0, 3.0])
parameters = System.Array[System.Object](["Benjamin",numbersArray])
method.Invoke(None,parameters)


numbersArray = parameters[1] # an updated Arg2 can be retrieved from parameters array
Run Code Online (Sandbox Code Playgroud)