COPIAR ARRAY - STRUCTURE

GANDA.NICK 08/10/2013 15:16:39
#429703
Olá a todos..

Nao consigo copiar um array como quero, em vb6 fazia-se só numa linha.. alguem sabe explicar o motivo?

segue o code:

Option Explicit On
Option Strict On

Public Class Form1

Private Structure Type_A
Dim nome() As String
End Structure

Private Structure Type_B
Dim j() As Type_A
End Structure

Dim a1() As Type_A
Dim a2 As Type_B

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

ReDim a1(0)
For i = 0 To UBound(a1)
ReDim a1(i).nome(0)
a1(i).nome(0) = [Ô]maria[Ô]
Next

ReDim a2.j(0)
For i = 0 To UBound(a2.j)
ReDim a2.j(i).nome(0)
a2.j(i).nome(0) = [Ô]Rita[Ô]
Next

Array.Copy(a1, a2.j, a1.Length) [ô] Não consigo copiar como quero com isto
[ô]a2.j = a1 [ô] Nem assim

[ô]For i = 0 To UBound(a1) [ô]Assim copia bem
[ô] For i2 = 0 To UBound(a1(i).nome)
[ô] a2.j(i).nome(i2) = a1(i).nome(i2)
[ô] Next [ô]i2
[ô]Next [ô]i

MsgBox(a2.j(0).nome(0)) [ô] Aqui tudo bem, foi copiado, dá-me as [Ô]maria[ô]s[Ô] que estavam no a1()

a1(0).nome(0) = [Ô]joana[Ô] [ô] Meto [Ô]joana[Ô] no a1()

MsgBox(a2.j(0).nome(0)) [ô] Não devia alterar para [Ô]joana[Ô] no a2()

End Sub

End Class



Obrigado desde já,
té +
LLAIA 15/10/2013 13:55:46
#430046
Resposta escolhida
Citação:

If sourceArray and destinationArray are both reference-type arrays or are both arrays of type Object, a shallow copy is performed. A shallow copy of an Array is a new Array containing references to the same elements as the original Array. The elements themselves or anything referenced by the elements are not copied. In contrast, a deep copy of an Array copies the elements and everything directly or indirectly referenced by the elements.



http://msdn.microsoft.com/en-us/library/k4yx47a1.aspx


Usando Array.Copy, vc tem um shallow copy, ou seja, as referências são passadas pro outro array. Por isso quando vc muda em um, reflete no outro. Quando vc usou os dois loops, vc teve um deep copy.

http://en.wikipedia.org/wiki/Object_copy
Tópico encerrado , respostas não são mais permitidas