IronPython 中的设置字段导致 None 值
Setting field in IronPython resulting in None value
我在使用 IronPython 时遇到问题。我创建了一个 C# DLL,其中有一个 class,如下所示:
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" 创建一个对象并为其属性赋值,但是当我尝试这样做时 "standard way",就像anAttribute = aValue
,如果我没有理解错的话,它只是将值复制到一个临时对象中,而不是复制到我要修改的对象中。
我是不是遗漏了什么?
非常感谢
我解决了它,因为实际上,
我必须调用的实例
MyClass.Parameters.anIntValue.SetValue(instance,value)
不是:
MyClass.Parameters.anIntValue.SetValue(obj.anIntValue,8)
而是:
MyClass.Parameters.anIntValue.SetValue(obj,8)
我在使用 IronPython 时遇到问题。我创建了一个 C# DLL,其中有一个 class,如下所示:
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" 创建一个对象并为其属性赋值,但是当我尝试这样做时 "standard way",就像anAttribute = aValue
,如果我没有理解错的话,它只是将值复制到一个临时对象中,而不是复制到我要修改的对象中。
我是不是遗漏了什么?
非常感谢
我解决了它,因为实际上,
我必须调用的实例
MyClass.Parameters.anIntValue.SetValue(instance,value)
不是:
MyClass.Parameters.anIntValue.SetValue(obj.anIntValue,8)
而是:
MyClass.Parameters.anIntValue.SetValue(obj,8)