2013-03-04 51 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 2013-03-04 21:42:33

+0

我想设置成员的数组大小。但成员“名称”和数组的大小从文件中读取。我如何根据从文件中读取的字符串来引用成员?这是一个例子,真正的“BS”类拥有数百名成员,因此做一些“如果”这样的事情是不现实的。 – scriptOmate 2013-03-04 21:48:41

回答

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 2013-03-04 23:07:38