这让我很难过。以下构造函数创建了一个新的Sector
实例,但更改array1
或array2
中的值会更改两者的值!
public Sector (Vector3[] vertices)
{
Vector3[] array1 = vertices;
Vector3[] array2 = vertices;
array1 [0].X = 0;
array2 [0].X = 1;
Console.WriteLine (array1 [0].X);
Console.WriteLine (array2 [0].X);
}
两个数组的输出均为1
1
1
这是c#语言的故意部分吗?有什么替代方案?
答案 0 :(得分:4)
数组是引用,因此调用array1 = vertices
不会复制值,而是将它们设置为指向同一个对象。因此,您只有一个数组。
如果你想要两个,那么复制数组,例如:
Vector3[] array1 = vertices.ToArray(); //ToArray duplicates the contents as an array
Vector3[] array2 = vertices.ToArray();
答案 1 :(得分:1)
上面引用的两个数组都只是对顶点数组的引用。因此,任一数组中的更改都将导致顶点数组发生更改。
如果您希望避免此引用问题,则需要克隆顶点数组。