我刚刚开始在我的C#应用程序中使用Jint 2.0。但是,我似乎无法从Jint中检索值。
即使提供了示例代码:
var engine = new Jint.Engine();
engine.Execute(@" function add(x, y) { return x + y; } var z = add(3, 2);");
var z = engine.GetValue("z");
Console.WriteLine(z); // -> 5
var z = engine.GetValue("z");
行抛出InvalidCastException(指定的强制转换无效)考虑到这是示例代码,我缺少一些简单的东西吗?
更新:如果将“ GetValue”更改为“ GetGlobalValue”,我能够使其正常工作。我仍然想知道为什么会这样,所以我将问题悬而未决。
最佳答案
请升级到2.1.0.0版。我已经尝试使用此最新版本的代码,并且不会引发InvalidCastException。最新版本进行了一些更改和错误修正。
一个简单的解释是,在2.0中,GetGlobalValue函数首先从Global范围中检索值对象本身,然后将其传递给GetValue函数。在2.1版中,这是结合在一起的,因此不会引发InvalidCastException。
还要知道的是engine.GetValue函数总是返回JsValue对象。您可以添加AsNumber()函数,该函数以Double形式返回值。
var engine = new Jint.Engine();
engine.Execute(@" function add(x, y) { return x + y; } var z = add(3, 2);");
var z = engine.GetValue("z").AsNumber();
Console.WriteLine(z); // -> 5
由于几乎没有文档,我建议查看https://github.com/sebastienros/jint/tree/master/Jint.Tests/Runtime为Jint编写的测试。
关于c# - 指定的类型转换在Jint 2.0中无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23917321/