0

我在 VBA 中有一个应用程序,它为我的 VB.Net dll 提供了一个二维变体。它是一个数组,其中每个组件都是另一个包含两个位置的数组。

我想得到这个两位数组。当我使用 VBA 时,我可以通过执行以下操作直接访问每个位置的数据:

dataArray(index, 0) or dataArray(index, 1)

当我想获得两位数组时,我可以使用:

Dim posArray as variant
posArray = dataArray(index)

posArray(0) 包含 dataArray(index, 0) 并且 posArray(1) 包含 dataArray(index, 1)。

但是当我使用 VB.Net 时,我可以直接访问数据,就像第一个示例一样。但是,当我尝试从二维数组中获取一维时,就像我在第二个示例中所做的那样,这是不可能的。

Dim posArray as Object
posArray = dataArray(index)

它说“试图对维数不正确的数组进行操作。”

我已经尽一切努力让它发挥作用,我不想一一做出归属,比如:

posArray(0) = dataArray(index, 0)
posArray(1) = dataArray(index, 1)

感谢您的帮助。

4

2 回答 2

2

您需要自己旋转并生成一维数组。.NET 中没有库调用可以为您执行此操作。

dim arraySlice as string[yourArrayWidth]
for index = 0 to yourArrayWidth
  arraySlice[index] = yourArray[4, index]
next

上面的示例将从 yourArray 中取出第 4 行并将其粘贴到 arraySlice 中。自然,您需要清理它并将其放入一个接受 rowIndex 作为参数的函数(以及另一个接受 columnIndex 的垂直拆分函数)。

多年来,您将把这些小功能收集到您自己的实用程序库中。从现在起 5 年后,您将需要一个 ArraySlice,并且您已经有了一个函数来完成它。

于 2010-02-26T19:04:34.877 回答
1
Dim Dim1Len As Integer = 5
Dim Dim2Len As Integer = 2
Dim DimToExtract As Integer = 2
Dim inMultiDArr(5, 2) As Integer
inMultiDArr = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}}
Dim outSingleDArr(5) As Integer
outSingleDArr = {0, 0, 0, 0, 0}

Buffer.BlockCopy(inMultiDArr, Marshal.SizeOf(GetType(Integer)) * Dim1Len * (DimToExtract - 1),
                 outSingleDArr, 0, Marshal.SizeOf(GetType(Integer)) * Dim1Len)

BlockCopy“outSingleDArr”之后将包含 { 6, 7, 8, 9, 10 }。以上内容来自这篇文章

于 2013-08-29T18:42:24.917 回答