1

我有一个 C# 类

public MY_CLASS(int number)
        {
            SomeField = number;
            SetElseWhere = 0;
        }
    }

我想传递给一个 C# 函数

public static bool MyTask(string pathXML, out MY_CLASS test)

我希望在一个实例中MyTask修改该字段SetElseWhereMY_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。但这不是我作为第二个参数发送的实例,用 property 说明out

当我检查结果时,我可以看到返回的元组中的对象已被正确修改,但我发送的实例没有被修改。

任何想法为什么?

4

1 回答 1

1

好的,我终于理解了您的问题,并且没有记录此问题。Python 中没有 out/ref 参数的概念,因此对参数的修改会在元组中返回。

这是一个关于此的未解决问题:

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

于 2018-06-27T19:40:47.250 回答