0

ファイルの読み取りに基づいてメンバー配列を ReDim しようとしています。私はそれを行う方法を理解できません。これは私が試したものですが、うまくいきません。

Public Class BS
    Public A() As String
    Public B() As Double
    Public C() As Double
End Class

Public Class SB

    Public MyBS() As BS

    'ReadFieldString is a function that returns a string of the field name of Class BS,
    'i.e., A, B or C.  For test purpose, retun a constant
    Public Function ReadFieldString() As String
        Return "B"
    End Function

    'GetArrayDim is a function that returns an integer, which is the size of the array
    'of that field name. For test purpose, retun a constant
    Public Function GetArrayDim() As Integer
        Return 1
    End Function

    Public Sub DimArrays()
        ReDim MyBS(3)
        Dim i As Integer
        For i = 0 To MyBS.Length - 1
            'Try to ReDim the member of MyBS
            ReDim MyBS(i).GetType.GetField(ReadFieldString)(GetArrayDim)
        Next()
    End Sub

End Class

ReDim ステートメントには、「式は値であるため、代入のターゲットにすることはできません」というエラーがあります。前もって感謝します。

4

1 に答える 1

1

そのように機能するかどうかはわかりませんReDim。コードをこれに変更すると、あなたが望んでいると私が信じていることが達成されます:

Public Sub DimArrays()
    ReDim MyBS(3)
    Dim i As Integer
    For i = 0 To MyBS.Length - 1
        MyBS(i) = New BS()
        Dim f = GetType(BS).GetField(ReadFieldString())
        f.SetValue(MyBS(i), Array.CreateInstance(f.FieldType.GetElementType(), GetArrayDim()))
    Next
End Sub

ただし、BSコンストラクターで配列サイズを指定する方が良いと思います。

于 2013-03-04T22:10:39.980 に答える