2017-02-28 27 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