在IronPython中设置字段导致无值

时间:2015-02-25 20:34:04

标签: c# python .net ironpython

使用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 ,如果我理解正确,它只会将值复制到临时对象而不是我想要修改的对象。

我在这里错过了什么吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

我解决了它,因为实际上,

我必须在

中调用的实例
 MyClass.Parameters.anIntValue.SetValue(instance,value)

不是:

MyClass.Parameters.anIntValue.SetValue(obj.anIntValue,8)

而是:

MyClass.Parameters.anIntValue.SetValue(obj,8)