C# 指定的强制转换在Jint 2.0中无效
我刚刚开始在我的c#应用程序中使用Jint 2.0。然而,我似乎无法从Jint中检索值 即使提供了示例代码:C# 指定的强制转换在Jint 2.0中无效,c#,javascript,jint,C#,Javascript,Jint,我刚刚开始在我的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"); Cons
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函数首先从全局范围检索value对象本身,然后将其传递给GetValue函数。在版本2.1中,这是组合的,因此不会引发InvalidCastException
另外值得一提的是,engine.GetValue函数总是返回一个JsValue对象。可以添加AsNumber()函数,该函数以双精度形式返回值
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
由于几乎没有文档,我建议您查看为Jint编写的测试。错误消息中有更多详细信息吗?它试图向/从何处进行转换?仅此而已,但它表示目标站点是一个JsValue。虽然当我将var z更改为JsValue z时,我得到了相同的错误。