我需要将下一个VB代码翻译成与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)。在上述情况下,能够确定用于识别k搜索阵列的M(1,k)或M(2,k)...
提前致谢!
答案 0 :(得分:0)
要创建一个基于1的3x20对象矩阵,可以这样做:
Object[,] M = (Object[,]) Array.CreateInstance(typeof(Object), new int[]{3,20}, new int[]{1,1});
据我所知,C#中没有一种简单的方法可以为多维数组复制ReDim Preserve。我认为你每次都必须创建一个新的数组,并使用Array.Copy方法复制元素。话虽如此,我相信你最好使用A_J的List<>结构或类别的建议:
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
});
}