【问题标题】:Function not returning Array Values VB函数不返回数组值 VB
【发布时间】:2020-09-05 18:21:08
【问题描述】:

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

【问题讨论】:

  • The function doesn't return any values - 确实如此。你只是把它们扔掉。
  • 删除名为 FutureArray 的 局部变量 以取得成功。
  • 您需要更改Console.WriteLine(FutureArray(ArrayRows, ArrayColumns)) 以使用ij 变量,请参阅下面的答案。

标签: arrays vb.net function


【解决方案1】:

您的代码有几个问题。
Function 必须具有数据类型。在这种情况下,由于您要返回包含多个数据类型的二维数组,因此它必须是 Object 数组。
使用 Option Strict 和 Option Infer on...

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

【讨论】:

    【解决方案2】:

    您遇到的一个问题是您的 Console.Writeline 正在循环通过相同的索引。

    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

    【讨论】:

    • 好的,已经进行了建议的更改,但在线上出现错误 BC30672 和 BC31087 - Dim FutureArray(2, 1) As Object(,) = PopulateFutureArray()
    • @Michael512,不带 As Object(,) 试试?您收到的这些错误编号的错误描述是什么?
    猜你喜欢
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 2018-09-25
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多