PythonNET: функция C# не изменяет переданный ей экземпляр класса
У меня есть C# класс, как
public MY_CLASS(int number)
{
SomeField = number;
SetElseWhere = 0;
}
}
что я хочу, чтобы перейти к функции C#, как
public static bool MyTask(string pathXML, out MY_CLASS test)
Я жду MyTask
изменить поле SetElseWhere
в случае MY_CLASS
В PythonNet я вызываю функцию как
import System
my_dll = System.Reflection.Assembly.LoadFile('example.dll')
MY_CLASS_t = my_dll.GetType('NAMESPACE.MY_CLASS')
my_instance = System.Activator.CreateInstance(MY_CLASS_t)
x = MyTask('test.xml', my_instance)
Теперь это становится странным, по крайней мере для меня:
Возвращаемое значение x является кортежем с двумя записями, логическим и типом объекта NAMESPACE.MY_CLASS
, Но это не тот экземпляр, который я отправил как второй параметр, указанный в свойстве out
,
Когда я проверяю результаты, я вижу, что объект в возвращенном кортеже был правильно изменен, но отправленный мной экземпляр не был изменен.
Есть идеи почему?
1 ответ
Хорошо, я наконец понял вашу проблему, и эта проблема не задокументирована. В Python отсутствует концепция аргументов out / ref, поэтому изменения в аргументах возвращаются в кортеже.
Вот открытый вопрос об этом: