我刚刚开始在我的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/

10-11 11:39