C# IronPython中的设置字段导致无值
我在使用IronPython时遇到了一个问题。我创建了一个C DLL,其中有一个类如下所示:C# IronPython中的设置字段导致无值,c#,python,.net,ironpython,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;
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...
}
import clr
clr.AddReferenceToFileAndPath("C:\MyPath\MyFile.dll")
from MyFile import MyNamespace
obj = MyClass()
obj.anIntValue = 8
print obj.anIntValue
IronPython中的代码如下所示:
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...
}
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,如果我理解正确,它只会将值复制到一个临时对象中,而不是复制到我想要修改的对象中
我是不是遗漏了什么
非常感谢我解决了这个问题,因为实际上 我不得不打电话的例子
MyClass.Parameters.anIntValue.SetValue(instance,value)
不是:
MyClass.Parameters.anIntValue.SetValue(obj.anIntValue,8)
而是:
MyClass.Parameters.anIntValue.SetValue(obj,8)
对IronPython一点也不熟悉,但从C的角度来看,您的值似乎都隐藏在结构参数中。因此,不在MyClass对象上定义一个tValue是有意义的,因为它是在MyClass.Parameters.anitValue下定义的。如果您将一个tValue直接作为类的成员公开,它是否有效?这实际上是我的一个错误,obj=MyClass。参数实际上是我在IronPython代码中编写它的方式。我似乎没有权限编辑我自己的问题