gpt4 book ai didi

c# - 不能将 .length 属性与 IronJS 和 ArrayObject 一起使用

转载 作者:行者123 更新时间:2023-11-29 10:20:58 25 4
gpt4 key购买 nike

我正在使用 IronJs 的最新版本 (0.2.0.1),我的 js 脚本无法正确检索已使用 IronJs.Runtime.ArrayObject 设置为 js 引擎的数组的长度。但是,我的变量被很好地识别为一个数组,如下面的 C# 代码所示。

var jsCode = @"myArray.length;";
var javascriptEngine = new IronJS.Hosting.CSharp.Context();
var array = new ArrayObject(javascriptEngine.Environment, 2);//array of size 2
array.Put(0, 12.0);//mock values
array.Put(1, 45.1);

javascriptEngine.SetGlobal<ArrayObject>("myArray", array);

var result = javascriptEngine.Execute(jsCode);
Console.WriteLine(result);

var jsCode2 = @"myArray instanceof Array;";
var result2 = javascriptEngine.Execute<bool>(jsCode2);
Console.WriteLine(result2);

我们得到以下输出

undefined
True

最佳答案

这是 IronJS 运行时中的错误。您应该在适当的 GitHub 存储库中打开一个问题:https://github.com/fholm/IronJS/

解决方法是强制重新分配整个数组。在这种情况下,.length 属性似乎已正确设置。实现这一目标的一种骇人听闻的方法是创建一个比需要的小的ArrayObject(例如一个 0 大小的 ArrayObject),然后将一些值放入其中.以下测试通过:

    [TestMethod]
public void TestWithZeroSizedArray()
{
string jsCode = @"myArray.length;";
var javascriptEngine = new IronJS.Hosting.CSharp.Context();
var array = new ArrayObject(javascriptEngine.Environment, 0); // Creates a 0-sized Array
array.Put(0, 12.0);
array.Put(1, 45.1);

javascriptEngine.SetGlobal<ArrayObject>("myArray", array);

var result = javascriptEngine.Execute(jsCode);
Assert.AreEqual(2, result);
}

请记住,底层 .NET 数组的多次复制/重新分配会导致性能问题。

关于c# - 不能将 .length 属性与 IronJS 和 ArrayObject 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12143437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com