我刚开始在我的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'。我仍然想知道为什么会这样,所以我将这个问题保持开放。
答案 0 :(得分:2)
请升级到2.1.0.0版。我已尝试使用此最新版本的代码,它不会抛出InvalidCastException。最新版本有几处更改和错误修正。 一个简单的解释是,在2.0中,GetGlobalValue函数首先从全局范围中检索值对象本身,然后将其传递给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编写的测试。