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受け入れるため、プロパティまたは関数の戻り値ではなく、変数またはフィールドを指定する必要があります。がプロパティではなくフィールドの場合、を呼び出すことができます。あるいは、それ自体が配列への参照を保持する型を保持することもできます。その基準を満たす2つの組み込みタイプはとです。ちなみに、タイプ名と変数名が明確に区別されるように識別子名を変更することをお勧めします(vb.netでは大文字と小文字は区別されません)。testArrayrefParent.childrensetChildren(parent.children);Parent.childrenList(Of Child)Child()()

于 2012-05-02T17:30:23.677 に答える
0

配列を使用しているため、別の要素を追加するには、配列をReDimする必要があります。

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