Im разрабатывает небольшое приложение/игру в Unity3D.Unity C# Array - как клонировать
Проблема в следующем: Мне нужно клонировать массив (называть его tempArray) и вносить в него некоторые изменения. Затем мне нужно изменить значения массива MAIN на измененный tempArray. Однако, всякий раз, когда я вношу изменения в клонированный массив, те же самые изменения внесены в основной.
Таким образом, я использовал следующий код:
private Cell[,] allCells = new Cell[256, 256];
private Cell[,] cellClone = new Cell[256,256];
//meanwhile initiated to some values//
//Here i clone the array.
cellClone = (Cell[,])allCells.Clone();
//Here i output the values for an element from both arrays.
Debug.Log(cellClone[0, 0].region.name.ToString());
Debug.Log(allCells[0, 0].region.name.ToString());
//Here i want to change "Region" variable of cellClone ONLY.
cellClone[0, 0].setRegion(new Region("testregion123", Color.cyan, false));
//Finally, i output the same values again. Only cellClone should change.
Debug.Log(cellClone[0, 0].region.name.ToString());
Debug.Log(allCells[0, 0].region.name.ToString());
Однако вывод показывает, что элемент allCells [0,0] был также изменен. Это означает, что любая операция, которую я делаю с клонированным массивом, выполняется в основном массиве.
EDIT:
После много играть вокруг я реализовал это в качестве решения. Я отправляю это, если у кого-то есть аналогичная проблема.
Но я не уверен, что так оно и должно быть сделано, если у кого-то есть какая-либо информация.
for (int i = 0; i < allCells.GetLength(0); i++)
{
for (int j = 0; j < allCells.GetLength(1); j++)
{
//cellClone[i, j] = allCells[i, j].Clone();
//cellClone[i, j] = new Cell((int)allCells[i, j].position.x, (int)allCells[i, j].position.y, allCells[i, j].getRegionName());
cellClone[i, j] = allCells[i, j].clone();
}
}
и функция клона:
public Cell clone()
{
Cell n = new Cell((int)position.x, (int)position.y, regionName);
return n;
}
Вы проверили 'Deep Copy или Clone.? вот какой-то пример http://stackoverflow.com/questions/4054075/how-to-make-a-deep-copy-of-an-array-in-c – MethodMan
Я пробовал глубокую копию.Однако я сбросил его, когда попросил меня установить «UnityEngine.Vector2» как сериализуемый. – Szlosestack