PythonNET: функция C # не изменяет переданный ей экземпляр класса - PullRequest
0 голосов
/ 27 июня 2018

У меня есть класс 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 Ответ

0 голосов
/ 27 июня 2018

Хорошо, я наконец понял вашу проблему, и эта проблема не задокументирована. В Python отсутствует концепция аргументов out / ref, поэтому изменения в аргументах возвращаются в кортеже.

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

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

...