我有这个方法:
public bool CantMoveIfCreatedCheck(Pieces[,] pieces, int rowStart, int columnStart,
int rowEnd, int columnEnd)
{
pieces[rowEnd, columnEnd] = pieces[rowStart, columnStart];
// shift one piece to another location
pieces[rowStart, columnStart] = null;
if (whitePiece)
{
for (int z1 = 0; z1 < 9; z1++)
{ //Find Threatening piece
for (int j = 0; j < 9; j++)
{
if (pieces != null && pieces[whitekingRow, whitekingColumn] != null))// i have some check algorithm
{
canCheck = true;
chess.YouWillBeCheckedCantMove();
}
}
}
}
pieces[rowStart, columnStart] = pieces[rowEnd, columnEnd];// shift it back to the end location
pieces[rowEnd, columnEnd] = null;
return canCheck;
}
我在这里要做的是暂时改变阵列内的棋子位置,并在两个循环结束后将它们移回。
但是因为所有东西都通过引用与数组/对象一起工作,所以将数组中一个位置的一个部分移动到数组的另一个位置会产生问题。有没有办法以某种方式将数组更改为另一个数组,而不影响原始数组
例如,创建temperoryArray[,]=pieces[,];
(它对我没用,因为它复制了引用并影响了数组)。
还有另一种方法吗?
答案 0 :(得分:3)
为了将数组复制到临时数组,您需要深层复制数组中的对象,而不是浅层复制(仅使用赋值)引用。 Here's关于在C#中进行深度复制的好文章。
由于你有一个对象数组(实际上,这是一个引用数组),赋值只是复制引用。