0

我在 vb.net 中遇到了数组调整大小的问题。我有点理解为什么会出现这个问题,但我不确定如何解决它。基本上,我有一个类,它有一个传递给它的对象数组。我试图让一个子调整数组的大小并向其中添加另一个对象。但是,一旦完成,原始对象就不会得到更新。

最理想的情况是我想要这样的东西。

Sub Main()
    Dim parent As New Parent
    Dim first As New Child()
    Dim second As New Child()
    Dim children As Child() = New Child() {first, second}
    parent.children = children
    setChildren(getChildren(parent))
End Sub

Private Function getChildren(parent As Parent) As Child()
    Return parent.children
End Function

Private Sub setChildren(ByRef testArray As Child())
    testArray = New Child(3) {}
End Sub
4

3 回答 3

2

因为setChildren接受它的testArray参数 by ref,所以必须给它一个变量或字段,而不是一个属性或函数返回。如果Parent.children是一个字段,而不是一个属性,则可以调用setChildren(parent.children);. 或者,可以让Parent.children持有一个本身持有对数组的引用的类型;满足该标准的两个内置类型是List(Of Child)Child()()。顺便说一句,我建议更改您的标识符名称,以便类型名称和变量名称明显不同(vb.net 不区分大小写)。

于 2012-05-02T17:30:23.677 回答
0

由于您使用的是数组,因此您需要重新调整数组以添加另一个元素。

Private Sub setChildren(ByRef testArray As Child())
   Dim arrayLength as Int = testArray.Length  'total number of elements in array
   ReDim Preserve testArray(arrayLength) 
   testArray(arrayLength) = New Child {}
End Sub

编辑:忘记 Preserve 关键字

于 2012-05-02T17:39:52.300 回答
0

根据您的要求,我认为这ReDim Statement就是您所追求的:

Private Sub setChildren(ByRef testArray As Child())
    ReDim Preserve testArray(3)
End Sub

Preserve语句会将 的内容复制testArray到新创建的数组中。

于 2012-05-02T17:40:08.170 回答