0

我刚刚开始在我的 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”,我就能让它工作。我仍然想知道为什么会这样,所以我将问题悬而未决。

4

1 回答 1

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 编写的测试。

于 2014-05-29T22:02:16.323 回答