问题描述
我正在尝试使用函数填充数组,并将填充的数组传递回Main()
进行更多处理。该函数不返回任何值。数组FutureArray
单元为空。使用VB
进行了建议的更改。现在我遇到错误 BC30672不允许使用显式边界声明的数组进行显式初始化 BC3108数组修饰符不能同时在变量及其类型上指定
更新;我已经解决了两个错误,并发布了新代码。仍然没有为FutureArray返回任何值
Module Module1
Sub Main()
Dim FutureArray(,) As Object = PopulateFutureArray()
Dim ArrayRows As Integer
Dim ArrayColumns As Integer
ArrayRows = 2
ArrayColumns = 1
For i As Integer = 0 To ArrayRows
For j As Integer = 0 To ArrayColumns
Console.WriteLine(FutureArray(ArrayRows,ArrayColumns))
Next
Next
End Sub
Function PopulateFutureArray() As Object(,)
'Start of Create Future Dataes Array
Dim FutureArray(2,1)
FutureArray(0,0) = 10
Console.WriteLine(FutureArray(0,0))
FutureArray(0,1) = 0
Console.WriteLine(FutureArray(0,1))
FutureArray(1,0) = 11
Console.WriteLine(FutureArray(1,0))
FutureArray(1,1) = #11/1/2020#
Console.WriteLine(FutureArray(1,1))
FutureArray(2,0) = 1
Console.WriteLine(FutureArray(2,0))
FutureArray(2,1) = 0
Console.WriteLine(FutureArray(2,1))
Return FutureArray
'End PopulateFutureArray
End Function
End Module
解决方法
您的代码有几个问题。Function
必须具有数据类型。在这种情况下,由于您要返回一个包含多个数据类型的二维数组,因此它必须是一个Object
数组。
启用Option Strict和Option Infer ...
Sub Main()
Dim ReturnedArray = PopulateFutureArray()
Dim ArrayRows = 2
Dim ArrayColumns = 1
For i As Integer = 0 To ArrayRows
For j As Integer = 0 To ArrayColumns
Console.WriteLine(ReturnedArray(i,j).ToString)
Next
Next
Console.ReadLine()
End Sub
Function PopulateFutureArray() As Object(,)
Dim FutureArray(2,1) As Object
FutureArray(0,0) = 10
FutureArray(0,1) = 0
FutureArray(1,0) = 11
FutureArray(1,1) = #11/1/2020#
FutureArray(2,0) = 1
FutureArray(2,1) = 0
Return FutureArray
End Function
,
控制台是您遇到的一个问题。写入行正在遍历相同的索引。
Console.WriteLine(FutureArray(ArrayRows,ArrayColumns))
应该是
Console.WriteLine(FutureArray(i,j))
这是更新的有效解决方案:
Module Module1
Public Sub Main()
Dim FutureArray As Object(,) = PopulateFutureArray()
Dim ArrayRows As Integer
Dim ArrayColumns As Integer
ArrayRows = 2
ArrayColumns = 1
For i As Integer = 0 To ArrayRows
For j As Integer = 0 To ArrayColumns
Console.WriteLine(FutureArray(i,j))
Next
Next
End Sub
Private Function PopulateFutureArray() As Object(,)
Dim FutureArray As Object(,)
ReDim FutureArray(2,1)
FutureArray(0,0) = 10
FutureArray(0,1) = 0
FutureArray(1,0) = 11
FutureArray(1,1) = #11/1/2020#
FutureArray(2,0) = 1
FutureArray(2,1) = 0
Return FutureArray
End Function
End Module
解决方案的版本1: 正如@GSerg所指出的,您正在调用函数。但是,不要将结果分配给任何东西。
Dim FutureArray(2,1)
FutureArray = PopulateFutureArray()
即使变量名相同,它们也不会共享相同的内存/存储空间,您仍然遇到variable scope问题。
Function PopulateFutureArray()
'Start of Create Future Dataes Array
Dim FutureArray(2,1)
我还要指出的一件事是为数组分配类型(注意:这会出错,您不能像这样声明和调整数组大小,请参见上面的完整解决方案):
*Dim FutureArray(2,1) as Object(,)*
FutureArray = PopulateFutureArray()
然后将您的函数更改为返回:
Function PopulateFutureArray() as Object(,)
我正在使用object
,因为您同时存储着integer
和date
。您可以阅读更多docs.microsoft.com