楼主:
mark0708 (sheep)
2020-02-08 00:34:32VS 2010 + .NET 4.0
最近在写C# 常常用
foreach (var v in class)
{
string s = v.name;
}
读的时候没什么问题只要传进去的东西已经写好 看起来都OK
问题在指定一个已经初始化的结构时
常常会有针对 结构内成员进行 Array.resize时 用监看视看时
var内的 array 被程式 从 null 被resize成我要的大小
但是原先的 却还是null
ex:
var varTemp = LoadData;
Array.resize( ref v.GroupInfo, 10); // GroupInfo 也是一个结构阵列
// public SomeStruct[] GroupInfo;
在这时去进行监看 会发现 varTemp.GroupInfo 有10组可设定
但是原先的LoadData.GroupInfo 依旧维持 null
但是也不是都这样 另外的 LoadData.metadat[].GroupInfo 两边就都是同步的
目前是先处理完后 多写一行 LoadData = varTemp 去避免这问题...
但是还是问一下有没有人了解原因
作者:
s4300026 (s4300026)
2020-02-11 19:32:00老实说我以为所有的行为都是shallow copy, 所谓的deep copy要自己写...原po你可以把两种的操作情境的变量名称写完整一点吗?point a,b; a.x=3; b=a; b.x=10; a.x=?所以重点在于 a,b 是两个实体,还是一个实体。如果是class则为一,struct则为2。会null的原因是因为你是走struct copy, 也就是值复制,等号左边的接收者会多产生一个物件, 而不会null 的原因是因为走class copy, 等号左边的接收者只拿到参考的复制品, 因此并没有多复制一个物件出来。 然后你都只有传入左侧的复制者,然后去看右边的人有没有改变,如果是值复制,就不会同步,如果是参考复制,就会同步。第一次你做struct的=, 因此没同步。第二次你做array的=,array的=是class copy, 因此有同步。