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, поэтому изменения в аргументах возвращаются в кортеже.

Вот открытый вопрос об этом:

https://github.com/pythonnet/pythonnet/issues/228

Другие вопросы по тегам