我确信这是一个简单的问题,但我对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)值没有填充,这在自包含版本中似乎不是问题所以我假设从外面也可以这样做
编辑以添加对函数的调用
答案 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
希望这有帮助。