我有一个传递给对象构造函数的锯齿状数组,但每当我编辑我作为参数传递的数组时,对象实例中的数组也会因某种原因被编辑。
bool[][] clickedArray = new bool[7][];
clickedArray[0] = new bool[3];
clickedArray[1] = new bool[3];
clickedArray[2] = new bool[3];
clickedArray[3] = new bool[2];
clickedArray[4] = new bool[3];
clickedArray[5] = new bool[3];
clickedArray[6] = new bool[4];
我从文件中读取了一些int,并根据int将bool设置为true或false。默认情况下,锯齿状数组的所有元素都设置为false:
for (int i = 0; i < clickedArray.Length; i++) // i < 7
{
for (int j = 0; j < clickedArray[i].Length; j++)
{
clickedArray[i][j] = false;
}
}
我还有一个对象列表。我通过将新对象添加到列表中来调用构造函数:buildsList.Add(new Builds(tokens[0], clickedArray));
这是构造函数:
public Builds(string buildName, bool[][] jagged)
{
this.buildName = buildName;
jaggedArray = jagged;
}
我不知道为什么,但是当我,例如,重置数组然后调用一个函数,如:
int selection = comboBox1.SelectedIndex;
clickedArray = buildsList[selection].getJaggedArray();
事实证明,列表中对象的锯齿状数组也重置了它的值。
答案 0 :(得分:0)
.NET中的数组是堆上的对象,因此您有一个引用。该引用按值传递,这意味着对数组内容的更改将反映在任何位置。
所以:jaggedArray = jagged;
它们具有与内存中相同地址相同的引用指针。
使用Array.Copy
方法来避免该问题,以便复制元素fr
om源数组到目的地。检查如何使用Array.Copy Method。