C#在类构造函数

时间:2017-10-13 03:46:42

标签: c#

我有一个传递给对象构造函数的锯齿状数组,但每当我编辑我作为参数传递的数组时,对象实例中的数组也会因某种原因被编辑。

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();

事实证明,列表中对象的锯齿状数组也重置了它的值。

1 个答案:

答案 0 :(得分:0)

.NET中的数组是堆上的对象,因此您有一个引用。该引用按值传递,这意味着对数组内容的更改将反映在任何位置。

所以:jaggedArray = jagged;

它们具有与内存中相同地址相同的引用指针。

使用Array.Copy方法来避免该问题,以便复制元素fr om源数组到目的地。检查如何使用Array.Copy Method