2009-10-01 255 views
2

什么是双打如何将双精度JavaScript数组转换为双精度数组。

return [2.145, 1.111, 7.893]; 

的JavaScript数组转换成双打的.NET阵列中,当Javascript数组是由web浏览器控件的文档对象

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

返回不使用的最佳方法字符串和解析?

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

回答

1

MSDN (HtmlDocument.InvokeScript Method)

基础类型由InvokeScript返回将改变对象的。如果被叫活动脚本函数返回标量数据,如整数,它会返回一个字符串...

看来整数将以字符串返回,你可以认为这同样适用于双打。

编辑: 我忘了你是在谈论一个数组。总之,MSDN继续:

...如果它返回一个基于脚本的对象,如对象使用JScript或VBScript的新运营商创建,这将是类型对象的...

所以看起来你会得到一个对象,但这并不能帮助你必须在C#代码中进行转换。

编辑2:

至于实际ComObject的转换。在阅读this这是关于Excel,但它仍然返回一个ComObject,似乎你目前的方式与字符串似乎是更简单的一个。有时候黑客是最好的解决方案:D

+1

但我有一个双打数组,他们被区别对待。 – stevehipwell 2009-10-01 08:01:38

+0

对不起!我注意到。我已经更新了我的答案 – 2009-10-01 08:05:00

+0

问题是将__ComObject放入我的.NET数组中。 – stevehipwell 2009-10-01 08:11:37

0

这个“问题”等于将VARIANT转换为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; 
} 
相关问题