代码之家  ›  专栏  ›  技术社区  ›  stevehipwell

如何将JavaScript双精度数组转换为.NET双精度数组?

  •  2
  • stevehipwell  · 技术社区  · 17 年前

    转换双精度JavaScript数组的最佳方法是什么

    return [2.145, 1.111, 7.893];
    

    当Javascript数组从webbrowser控件文档对象返回时,将其转换为一个双精度的.NET数组

    object o = Document.InvokeScript("getMapPanelRegion");
    

    不使用字符串和解析?

    返回的对象类型为_ComObject,因为它是正在返回的数组。数组的大小是固定的,因为我使用它将三个值返回给调用代码。我目前的解决方案是返回一个三个值的| deminalized字符串,然后拆分并解析该字符串以获得我的三个double。如果可能的话,我不想使用字符串操作,因为这感觉像是一个黑客。

    2 回复  |  直到 17 年前
        1
  •  1
  •   Karl Johan    17 年前

    从…起 MSDN (HtmlDocument.InvokeScript Method) :

    InvokeScript返回的对象的基础类型将有所不同。如果被调用的活动脚本函数返回标量数据,例如 一串 或 整数 ,则会以 一串 ...

    似乎整数将以字符串的形式返回,您可以假定这同样适用于双精度。

    编辑:

    ... 如果它返回基于脚本的对象,例如创建的对象 使用JScript或VBScript的新运算符 ,它将是 对象 ...

    因此,似乎您将获得一个对象,但这无助于您必须在C#代码中转换它的事实。

    编辑2:

    至于实际对象的转换。读后 this 这是关于Excel的,但它仍然返回一个ComObject,看起来您当前使用字符串的aproach看起来更简单。有时黑客是最好的解决方案:D

        2
  •  0
  •   user182669 user182669    14 年前

    这个“问题”相当于将变体转换为C#数组。为此,最简单的方法可能是使用反射。以下是如何:

    private static IEnumerable<object> SafeArrayToEnmrble (object comObject)
    {
        Type comObjectType = comObject.GetType();
        // spot here what is the type required
        if (comObjectType != typeof(object[,]))
        // return empty array, throw exception or whatever is your fancy
            return new object[0];
    
        int count = (int)comObjectType.InvokeMember("Length", BindingFlags.GetProperty, null, comObject, null);
        var result = new List<object>(count);
    
        var indexArgs = new object[2];
        for (int i = 1; i <= count; i++)
        {
            indexArgs[0] = i;
            indexArgs[1] = 1;
            object valueAtIndex = comObjectType.InvokeMember("GetValue", BindingFlags.InvokeMethod, null, comObject, indexArgs);
            result.Add(valueAtIndex);
        }
    
        return result;
    }
    
    推荐文章