我以前遇到過這個問題幾次。下面是一個例子代碼:在C#中運行代碼行後,變量的值會發生變化嗎?
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發生了變化。我不知道爲什麼會發生這種情況,如果有人能幫助我,我會非常感激。謝謝!
(對不起我的英文不好)
查看您最喜歡的C#編程手冊,並再次閱讀該章節,解釋參考類型和值類型之間的區別。數組是參考類型。 – 2013-05-04 04:06:07
我不知道,謝謝! – avatarbobo 2013-05-04 06:02:24