我之前遇到过几次这个问题。这是一个示例代码:
public void moveRight(int x, int y, int rows, int columns)
{
char[,] imatrix = GameInstance.vexedGame.getLastMatrix(); // <-- creating a variable and initializing it.
char letter = imatrix[x, y]; // Doesn't matters
char[,] oldMatrix = imatrix; // Creating a new var that is the same as the variable created before
if (imatrix[x, (y + 1)] == '-')
{
//LINE 1
GameInstance.vexedGame.setLastMatrix(oldMatrix); //Setting the var of this class to the old matrix (until here everything's fine)
imatrix[x, (y + 1)] = letter;
imatrix[x, y] = '-'; //Changing the matix
//LINE 2
GameInstance.vexedGame.setActualMatrix(imatriz); //Setting the actual matrix.
}
}
发生的情况是,当我在整个事情中放置断点时,当我到达 //LINE 1 时,该值与更改前的矩阵副本一起保存。在我在 //LINE 2 中进行更改后,不仅 imatrix 的值发生了变化,而且第一个矩阵的值也发生了变化,因此 GameInstance.vexedGame.setLastMatrix 发生了变化。我真的不知道为什么会发生这种情况,如果有人可以帮助我,我将不胜感激。谢谢!
(对不起,我的英语不好)