vb.net中嵌套结构体传值复制的问题

代码如下:
模块声明:
Public Structure aaa2
Dim s() As Byte
End Structure

Public Structure aaa1
Dim str As String
Dim rr() As aaa2
End Structure

窗体中的代码:
Dim k As aaa1
Dim kb As aaa1
ReDim k.rr(1)
k.str = "123"
k.rr(1).s = "我123"
MsgBox(k.rr(1).s)
kb = k
kb.str = "1234"
kb.rr(1).s = "我1234"
MsgBox(k.rr(1).s)
MsgBox(k.str)
过程是将k复制到kb,然后从kb中修改数据
结果发现kb.str修改后,k.str没有发生变化,
但是kb.rr(1).s修改后,k.rr(1).s的值却跟着一起修改了。
也就是嵌套结构aaa2在复制的过程中仅仅只是传了数据地址给kb而已,并没有将所有数据一起复制给kb。请问如何才能在复制时完全新建一个kb。
上面模块声明错了,应该是
Public Structure aaa2
Dim s As String
End Structure

Public Structure aaa1
Dim str As String
Dim rr() As aaa2
End Structure

因为数组是引用类型,所以直接赋值会出现这种情况
可以在kb=k后单独复制数组
kb.rr=k.rr.Clone
这样两个数组就是独立的了
之所以先kb=k是为了当其含有多个成员时值型成员可以直接复制,只需Clone引用类型的就行了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-01-21
结构体赋值和数组赋值类似,必须遍历每个元素,如果有嵌套,还必须把嵌套的子结构体也遍历
第2个回答  2012-01-20
不知道