我需要将静态数组的值设置为另一个静态数组。但是当我这样做时,如果我改变第一个阵列,它也会影响另一个阵列。那我该怎么分配这些值?
我用这个例子简化了我的问题:
Select * from User INNER JOIN Photos ON (users.id_user = photos.id_user)
所以当我aign a2 = a1时,a2得到a1的地址或什么?但是为什么在我的第二个例子中,正常变量不会发生这种情况呢?
答案 0 :(得分:0)
这是因为静态变量存储在堆上。一旦你将a1分配给a2,你就有效地指向了相同的内存位置,这就是为什么a1和a2都会出现一个变化的原因。
在第二种情况下,这些变量被加载到堆栈中并且是值类型变量。因此,只复制值。
答案 1 :(得分:0)
通过指定a2 = a1,您不会将数组a1复制到a2中。 a1和a2表示对象的引用,所以当你使用a2 = a1时,你只是复制引用(所以a2和a1引用同一个对象,即数组{1,2,3,4,5}。这就是为什么你正在看到a2中a1的变化(因为它们基本相同)。
你想要的是逐个元素复制,如下所示: https://msdn.microsoft.com/pl-pl/library/system.array.copy%28v=vs.110%29.aspx
答案 2 :(得分:0)
当你指定a2 = a1时,你会做一个浅拷贝。 a1的引用(以某种方式等效于旧指针)被复制到a2。他们现在指向相同的数据,而改变一个则改变另一个。要创建深层副本,请使用Clone()函数,如下所示:
a2 = a1.Clone() as double[];