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でこの機能を繰り返したいのですが、次のことを試すと

Public 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

Public Function bound23P(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 にはありません。配列の下限を指定できなくなりました。

そうは言っても、同等の機能を自分で実現できない理由はありません。ほんの少しの作業が必要です。

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

B. _ 配列宣言を次のクラス宣言に置き換えます。

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 に答える