函数不返回数组值VB

问题描述

我正在尝试使用函数填充数组,并将填充的数组传递回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()

Addresses Error BC30672

即使变量名相同,它们也不会共享相同的内存/存储空间,您仍然遇到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,因为您同时存储着integerdate。您可以阅读更多docs.microsoft.com