public class TurnStatus{
public int[,] stonesStatus;
public bool[,] isHacked;
public bool[,] isTrapSet;
public TurnStatus(int[,] _stonesStatus, bool[,] _isHacked, bool[,] _isTrapSet)
{
stonesStatus = _stonesStatus;
isHacked = _isHacked;
isTrapSet = _isTrapSet;
}
}
public class TestClass : MonoBehaviour{
public int[,] currentStoneStatus = new int[10,10];
public bool[,] currentIsHacked = new bool[10, 10];
public bool[,] currentIsTrapSet = new bool[10, 10];
List<TurnStatus> TurnStatusList = new List<TurnStatus>();
void RecordTurnStatus()
{
TurnStatusList.Add(new TurnStatus(currentStoneStatus, currentIsHacked, currentIsTrapSet));
}
}
代码如上所述。
更改currentStoneStatus、currentIsHacked和currentTrapSet的值后,通过RecordTurnStatus函数将当前三个变量作为TurnStatus类变量存储并记录在TurnStatusList中。
然而,这里的问题是,在调用RecordTurnStatus函数并记录当前状态后,列表中的所有TurnStatus变量都会被最近存储的变量覆盖。
例如,如果在列表中依次保存A、B和C,则列表的内容将变为{C、C、C}。
我一直在复习,但我不明白问题出在哪里。我需要你的帮助。
这是因为数组是引用类型,所以所有对象都指向内存中相同的数组。
您应该复制/克隆阵列,例如:
stonesStatus = _stonesStatus.Clone() as int[,];