Мне недавно пришлось решать аналогичную проблему с использованием Python для .NET , позвольте мне поделиться с вами тем, что я обнаружил.
Вам необходимо передать столько аргументов, сколькоМетод требует.Поскольку концепция out
аргументов (= переданная посредством refence) не применима к Python, хитрость заключается в том, чтобы передать некоторые фиктивные аргументы ожидаемого типа.
Вызов методасначала я собираюсь вернуть значения, которые он должен вернуть, и значения out
.
Для моего случая использования вызываемый мной метод C # ничего не возвращал изначально (voidметод), тем не менее, вызов Python возвратил сначала None
, а затем out
значения, которые я получил, что является ожидаемым поведением, как указано здесь .
Ваша первая попытка не смоглаработать, потому что вы передаете только один аргумент, в то время как метод ожидает два, будь то out
или 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.))