我有一个 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)

感谢您的帮助。

有帮助吗?

解决方案

您会通过需要旋转并产生一维数组自己。有没有在.NET没有图书馆呼吁为你做它。

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

以上会抓住行4出来yourArray的并粘成arraySlice为你的例子。当然,你会想清理一下,把它变成一个接受的rowIndex作为参数(和垂直拆分接受一个columnIndex另一个函数)的功能。

这一点功能这样,你会在几年收集了到自己的工具库。从现在起5年之后,你就需要一个ArraySlice和你已经有一个函数来做到这一点。

其他提示

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 }。以上内容源自 这个帖子.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top