2013-03-04 2 views
0

Я пытаюсь ReDim массива-члена на основе чтения файла. Я не могу понять, как это сделать. Это то, что я пробовал, но это не сработает.VB 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 оператор имеет ошибку «Выражение представляет собой значение, и, следовательно, не может быть объектом уступки.» Спасибо заранее.

+1

Я не уверен, что вы пытаетесь выполнить с помощью типа get, но redim должен использовать только массив и новое количество элементов. http://msdn.microsoft.com/en-us/library/w8k3cys2(v=vs.100).aspx – Wade73

+0

Я пытаюсь установить размер массива члена. но член «Имя» и размер массива считываются из файла. Как передать член на основе строки, считанной из файла? Это пример, настоящий класс «BS» содержит сотни членов, поэтому делать что-то вроде «if» нецелесообразно. – scriptOmate

ответ

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.

+0

Спасибо, это то, что я искал. – scriptOmate

Смежные вопросы