0

我确信这是一个简单的问题,但我对 vb.net 很陌生,我正在努力弄清楚这一点。基本上在 VBA 中,您可以使用 Sub 来填充数组,只要数组已在模块中声明为 public,这可以在任何模块上看到。

Public reg12bound(1 To 5) As Double

Sub region12boundary()  
'  
'  Initialize coefficients for boundary equation  
'  
    reg12bound(1) = 348.05185628969  
    reg12bound(2) = -1.1671859879975  
    reg12bound(3) = 1.0192970039326E-03  
    reg12bound(4) = 572.54459862746  
    reg12bound(5) = 13.91883977887  
'  
End Sub

那么这可以使用下面的代码在另一个模块中看到

Private Function boundary23P(Temp)  
 Call region12boundary  
 boundary23P = (reg12bound(1) + reg12bound(2) * Temp + reg12bound(3) * (Temp ^ 2)) * 1000000  
End Function

本质上,我希望在 VB.net 中重复此功能,但是当我尝试以下操作时

公共 reg12bound(5) 作为 Double

Sub region12boundary()
    '
    '  Initialize coefficients for boundary equation
    '
    ReDim reg12bound(5)
    reg12bound(1) = 348.05185628969
    reg12bound(2) = -1.1671859879975
    reg12bound(3) = 0.0010192970039326
    reg12bound(4) = 572.54459862746
    reg12bound(5) = 13.91883977887
    '
End Sub

公共函数边界23P(ByVal Temp As Double)As Double

    call region12boundary()  
    boundary23P = (reg12bound(1) + reg12bound(2) * Temp + reg12bound(3) * (Temp ^ 2)) * 1000000  

End Function

该数组填充了 0 而不是值。当我在函数中填充时,该功能似乎工作正常。但我宁愿避免这种情况,因为大多数函数都引用相同的 34 个变量数组,这些变量需要复制到每个函数中。

我也意识到 reg12bound(0) 值没有被填充,这在自包含版本中似乎不是问题,所以我假设这在外部也很好

编辑以添加对函数的调用

4

1 回答 1

1

在 VB.NET 中,数组的下限总是 0。这是固定的。我同意 VB6 和更早的版本具有指定边界的功能。但在.NET 中没有。您不能再指定数组的下限。

话虽如此,您没有理由不能自己实现类似的功能。只需要一点工作。

一个。创建一个类来处理 LBound 偏移量。我已经用泛型展示了它,但如果你的数组总是相同的类型,你可以删除它。

Public Class MyArray(Of T)
    Public LBound, UBound As Integer
    Private theArray() As T

    Public Sub New(ByVal lBound As Integer, ByVal uBound As Integer)
        Me.LBound = lBound
        Me.UBound = uBound
        ReDim theArray(uBound - lBound)
    End Sub

    Default Public Property Items(ByVal item As Integer) As T
        Get
            Return theArray(item - LBound)
        End Get
        Set(ByVal value As T)
            theArray(item - LBound) = value
        End Set
    End Property
End Class

。用此类声明替换您的数组声明:

Public arr As New MyArray(Of String)(5, 10)

C. _ 现在您可以像以前一样在代码中设置值:

    arr(5) = "item 5"
    arr(6) = "item 6"
    arr(7) = "item 7"
    arr(8) = "item 8"
    arr(9) = "item 9"
    arr(10) = "item 10"
    arr(11) = "item 11"  '<-- this wil cause index out of bounds error.

D. _ 并像以前一样访问存储在数组中的值:

    For i = 5 To 10
        Debug.Print(arr(i))
    Next

希望这可以帮助。

于 2013-11-11T10:45:40.107 回答