0
我有這樣的方法:問題與陣列算法
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[,];
(它沒有工作對我來說,因爲它複製引用,並影響了塊陣列)。
有沒有其他的方法?
爲什麼我要序列化,告訴你我想要它是一個淺拷貝的真相,不會影響我的對象數組,因爲我對數組進行的每一個操作都會影響該數組。它只是存儲在內存中,而不是像原始變量。我需要一個臨時數組,操作而不操作其他數組,這就是我的目標 – 2011-03-23 09:28:21
我作爲參數傳遞方法是什麼? DeepClone(件);如果你想創建一個數組副本和一個引用副本,這個工作不起作用 –
2011-03-23 09:42:48
,你可以使用'CopyTo()'方法創建一個不同的具有相同引用的臨時數組。然後可以修改臨時數組而不修改原始數組。但是,如果修改臨時數組內的對象,則還將修改原始對象內的對象。 – 2011-03-23 19:22:54