使用IronPython时遇到问题。我创建了一个C#DLL,其中有一个如下所示的类:
namespace MyNamespace
{
public static class MyClass
{
public struct Parameters
{
public String str1;
public String str2;
public int anIntValue;
}
public static void MyMethod(Parameters param, out Double Result, ref String msg)
{
//...Stuff...
}
IronPython中的代码如下所示:
import clr
clr.AddReferenceToFileAndPath("C:\MyPath\MyFile.dll")
from MyFile import MyNamespace
obj = MyClass()
obj.anIntValue = 8
print obj.anIntValue
输出值“0”,我收到警告:
RuntimeWarning: Setting field anIntValue on value type MyClass may result in updating a copy.
Use MyClass.anIntValue.SetValue(instance, value)...
所以我尝试了以下内容:
MyClass.anIntValue.SetValue(obj.anIntValue,8)
我收到以下错误:
ValueError : Field 'anIntValue' defined on type 'MyNamespace.MyClass' is not
a field on the target object which is of type 'System.Int32'.
所以基本上,我唯一想做的就是从“MyClass”创建一个对象并为其属性赋值,但当我尝试以“标准方式”创建它时,如anAttribute = aValue
,如果我理解正确,它只会将值复制到临时对象而不是我想要修改的对象。
我在这里错过了什么吗?
非常感谢
答案 0 :(得分:0)
我解决了它,因为实际上,
我必须在
中调用的实例 MyClass.Parameters.anIntValue.SetValue(instance,value)
不是:
MyClass.Parameters.anIntValue.SetValue(obj.anIntValue,8)
而是:
MyClass.Parameters.anIntValue.SetValue(obj,8)