2009-10-01 194 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; 
} 
相關問題