2017-02-28 40 views
-2

我需要的東西相當於C#翻譯下VB代碼多dimemsional陣列:使用VB REDIM保留相當於在C#中

Dim M() As Variant, M1 As Variant, i As Long, El As Variant, k As Long 
M1 = GetAllChildrenWindowHandlesA(CLngPtr(723126), 100): k = 1 
ReDim M(1 To 3, 1 To 1) 
For i = 1 To 20 
    M(1, i) = "x" & i: M(2, i) = M1: M(3, i) = i 
    k = k + 1: ReDim Preserve M(1 To 3, 1 To k) 
Next i 
Debug.Print UBound(M()), LBound(M()) 
ReDim Preserve M(1 To 3, 1 To k - 1) 
For Each El In M(2, 5) 
    k = k - 1 
    Debug.Print El, M(1, k), M(3, k) 
Next 

所以我需要能保持三個不同的變量類型的東西(字符串,數組,int),但彼此連接以便可以識別哪個字符串對應於同一級別的數組(或int)。在上面的情況下,能夠確定M(1,k)或M(2,k)爲已識別k搜索陣列...

在此先感謝!

+0

請不要使用': '空白是你的朋友。不知道答案是什麼(如果有的話),但我懷疑你使用基於0的數組索引編程會更容易。 – pinkfloydx33

+0

使用'List <>'。順便說一下,如果您提供您迄今爲止編寫的C#代碼,那將會很有幫助。 –

+0

你試過了什麼? Stackoverflow不是代碼編寫/翻譯服務。如果你嘗試過某些東西並且遇到困難,那就證明一下。標題中的問題與身體末尾的問題無關。你應該嘗試並重新說明你的具體問題是什麼 – pinkfloydx33

回答

0

要創建一個3×20的對象矩陣那是基於1,可以這樣進行:

Object[,] M = (Object[,]) Array.CreateInstance(typeof(Object), new int[]{3,20}, new int[]{1,1}); 

據我所知,還沒有在C#一個簡單的方法來複制使用ReDim保留多維陣列。我想你每次都必須創建一個新的數組,並使用Array.Copy方法來複制元素。話雖這麼說,我相信你會更好使用A_J的名單<>建議與結構或類:

struct MData 
{ 
    public string M1; 
    public IntPtr[] M2; 
    public int M3; 
} 

,然後是這樣的:

 IntPtr[] childHandles = GetAllChildrenWindowHandlesA(new IntPtr(723126),100); 

     List<MData> M = new List<MData>(); 
     for (int i = 0; i < childHandles.Length; i++) 
     { 
      M.Add(new MData() { 
        M1 = "x" + i.ToString() 
       , M2 = childHandles 
       , M3 = i 
      }); 
     } 
+0

首先感謝您的幫助! – FaneDuru

+0

謝謝!因爲我在C#中是新手,所以我需要更多關於使用結構和列表的說明,如下所示:如何在列表中添加很多這樣的三個序列?我如何在列表元素之間迭代以便在找到M3時使用M1?我的意思是搜索所有M3元素並返回找到的M1元素。 – FaneDuru

+0

我玩你的結構列表建議,它的作品就像一個魅力。再次感謝! – FaneDuru