在vb.net中传递常量列表(数组)

时间:2013-11-11 09:02:00

标签: arrays vb.net vba

我确信这是一个简单的问题,但我对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中重复此功能,但是当我尝试以下

  

Public reg12bound(5)As 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
     

Public Function boundary23P(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)值没有填充,这在自包含版本中似乎不是问题所以我假设从外面也可以这样做

编辑以添加对函数的调用

1 个答案:

答案 0 :(得分:1)

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

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

<强> A 即可。创建一个类来处理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

希望这有帮助。