我的应用程序使用IronPython为用户运行脚本。一个这样的脚本用于设置结构的成员。 我的结构如下:
[StructLayout(LayoutKind.Sequential)]
public struct Data
{
int a;
int b;
}
我为此结构声明了一个类级公共对象,如:
public Data data = new data();
我将data
对象设置为IronPython的范围变量:
scope.SetVariable("data", data);
在python脚本中,我设置变量a
和b
:
data.a = 5
data.b = 10
但是C#代码中的变量没有变化。我注意到如果我使用普通整数或任何其他类型,那些变量都在设置。
使用结构有问题吗?如何从IronPython设置C#结构成员?
答案 0 :(得分:0)
使用您的公开范围对象为脚本提供帮助方法 当我不能在IronPython中做到这就是我的工作。 IronPython为我提供了ifs,fors和whiles的完整语言的灵活性,但有时候与C#世界集成的答案是模糊的,所以我只是构建一个帮助方法。
您甚至可以输入参数,因为编组在函数调用中运行良好。 void SetResult(int a,int b);
次要注释可能是正确的你可能正在设置结构但结构不是通过引用传递它是传递值。
你应该明白这个概念。
这是一篇关于它的好文章......
What's the difference between passing by reference vs. passing by value?
你可以自己更多地谷歌这个概念。