У меня есть проблема при использовании моего класса ICloneable, когда дело доходит до клонирования списков:
class MetroBoards : ICloneable
{
public int Iteration;
public List<int[]> MetroPieces = new List<int[]>();
public List<char> MetroPiecesDefinition = new List<char>();
public object Clone()
{
return this.MemberwiseClone();
}
}
При попытке обновить список в клоне сделано так:
MetroBoards NewBoard = new MetroBoards();
NewBoard = (MetroBoards)ChosenBoard.Clone();
NewBoard.MetroPieces[MoveOne] = Coordinates;
И так:
MetroBoards (MetroBoards)ChosenBoard.Clone();
NewBoard.MetroPieces[MoveOne] = Coordinates;
Где MoveOne - целое число, а координаты - int [].Когда я обновляю список в моем клоне, он обновляет и клон, и базу.
Насколько я понял, "MemberwiseClone" должен предоставить мне глубокую копию, которая должна создать новый объект с копиямиего свойства, которые не должны быть связаны с новым объектом.
РЕДАКТИРОВАТЬ
Благодаря комментариям я перечитал документацию и изменил процесс клонирования следующим образом:
class MetroBoards : ICloneable
{
public int Iteration;
public List<int[]> MetroPieces = new List<int[]>();
public List<char> MetroPiecesDefinition = new List<char>();
public object Clone()
{
MetroBoards ThisBoard = (MetroBoards)this.MemberwiseClone();
ThisBoard.MetroPieces = new List<int[]>();
foreach (int[] Piece in this.MetroPieces)
{
int[] temp = new int[2];
temp[0] = Piece[0];
temp[1] = Piece[1];
ThisBoard.MetroPieces.Add(temp);
}
return ThisBoard;
}
}
Спасибо, что дали мне понять мою ошибку.