Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检索修改后的变量值_C#_Ironruby_Dynamic Language Runtime - Fatal编程技术网

C# 检索修改后的变量值

C# 检索修改后的变量值,c#,ironruby,dynamic-language-runtime,C#,Ironruby,Dynamic Language Runtime,我有一个IronRuby脚本,它通过ScriptScope修改变量集的值 我想在修改变量后检索它的值,但是我得到了旧值 这是我的代码: var-engine=Ruby.CreateEngine(); var scope=engine.Runtime.CreateScope(); 范围。设置变量(“y”,11); var source=engine.CreateScriptSourceFromString(“y=33;puts y;”,SourceCodeKind.Statements); 来源、

我有一个IronRuby脚本,它通过
ScriptScope
修改变量集的值

我想在修改变量后检索它的值,但是我得到了旧值

这是我的代码:

var-engine=Ruby.CreateEngine();
var scope=engine.Runtime.CreateScope();
范围。设置变量(“y”,11);
var source=engine.CreateScriptSourceFromString(“y=33;puts y;”,SourceCodeKind.Statements);
来源、执行(范围);
上述代码执行并将
33
输出到控制台,这是正常的

但是,我尝试在上述代码之后添加以下行:

Console.WriteLine(scope.GetVariable(“y”);
并输出原始值
11


有没有办法获得新的变量值?

设置变量是为了改变输入

e、 g

如果你有y=y+1

在DLR之前,您应该先编写脚本“y=11”,然后再编写“y=y+1” 如果你想在y=15的情况下再次运行它,你会创建一个新的脚本,将y初始化为15,然后它会被再次解释


现在的情况是y=33被y=11替换,setvariable是这样的,您可以对不同的输入使用相同的编译脚本,使用IronPython来检索值,我使用这样的代理对象

public class ScriptProxy
{
    private int _result;

    public int Result
    {
        get { return this._result; }
        set { this._result = value; }
    }
}
我调用SetVariable来传递ScriptObject的一个实例:

ScriptEngine pyEngine = Python.CreateEngine();
ScriptScope pyScope = pyEngine.CreateScope();

ScriptProxy proxy = new ScriptProxy();
pyScope.SetVariable("proxy", proxy);
在脚本中,可以设置结果:

proxy.Result=33;

“y=33被y=11所取代”——这似乎没有发生,因为当我运行脚本时,ruby引擎输出
33
。另外,
y=11
位于
y=33
之前。我在将脚本更改为
put y之后发现了这一点;y=33;把你放在一边。这将输出
11
和之后的
33
,正如预期的那样。如果y仍然返回为11,即使它“应该”是33,这表明发生了其他事情,尽管我不太确定。我们使用IronPython,但原理类似,我会仔细研究一下,看看我是否能发现一些东西。我已经测试了你的解决方案,它是有效的。这一定是因为引用类型和值类型之间的差异,尽管我希望基元类型也能在这种情况下工作。你提出的解决方法在我的情况下是可以接受的,所以我会接受它作为答案。谢谢和+1!事实上,这是因为对象是传入引用的。但我不知道我们是否能在ref中传递一个数据类型基!