EDIT:
OP ошибочно принимал новый экземпляр Block
как экземпляр, извлекаемый из List<Block>
, поскольку List<Rectangle>
не был клонирован в конструкторе копирования, а просто назначен, что привело к двум уникальным экземплярам Block
, ссылающимся на то же самое List<Rectangle>
.
Правильный конструктор копирования в этом случае будет:
public Block(Block originalBlock)
{
this._block = new List<Rectangle>(originalBlock.block);
this._blockNum = originalBlock.blockNum;
}
Для чего требуется аналогичный конструктор копирования в классе Rectangle
.
Это должно работать для вас:
public class Block
{
private List<Rectangle> _block;
public List<Rectangle> block
{
get { return _block; }
}
private int _blockNum;
public int blockNum
{
get { return _blockNum; }
}
// Copy constructor
public Block(Block originalBlock)
{
// IMPORTANT: This does not create a new List<Rectangle>! See EDIT
this._block = originalBlock.block;
this._blockNum = originalBlock.blockNum;
}
}
Использование:
Block originalBlock = new Block();
// Returns a new instance of Block with similar member data.
Block copiedBlock = new Block(originalBlock);
Прочтите Как: написать конструктор копирования (Руководство по программированию в C #) | Документы Microsoft