我最近不得不使用来解决类似的问题用于 .NET 的 Python http://pythonnet.github.io/,让我与您分享我所发现的情况。
您需要传递该方法所需的尽可能多的参数。自从有了这个概念out
参数(= 通过引用传递)不适用于 Python,技巧是传递一些虚拟参数预期的类型。
方法调用将首先返回它应该返回的值,and the out
values.
对于我的用例,我调用的 C# 方法最初没有返回任何内容(void 方法),但是 Python 调用首先返回None
然后是out
我所追求的价值观,这是所述的预期行为here https://stackoverflow.com/a/19600349/7556646.
您的第一次尝试无法工作,因为您仅传递一个参数,而该方法需要两个参数,无论是out
or ref
论据。
r1, d1 = Double.TryParse("12.3")
您的第二次尝试也无法工作,因为在这种情况下,虚拟参数的类型与方法期望的类型不匹配Double
.
d2 = 0.0
r2, d2 = Double.TryParse("12.3", d)
这就能解决问题:
import clr
from System import Double
dummy_out = Double(0.)
returned_val, real_out = Double.TryParse("12.3", dummy_out)
您可以观察到最后一行对dummy_out
通过检查其id
通话之前和之后。
因此,您需要的代码的较短版本是:
returned_val, real_out = Double.TryParse("12.3", Double(0.))