我知道这是由引用而不是值传递引起的问题,但我不确定需要做什么来解决它。
我有一个字段变量string[][] _cubeState
,它表示 2x2 Rubiks 魔方的状态。这个锯齿状数组表示发生任何旋转之前立方体的状态,并且应该在每次旋转之后更新,但只有在我的旋转方法返回并覆盖它之后。
实际发生的情况是,当我到达 newCube[0][index] = _cubeState[0][index + 10];
行时,该行更新了我的 newCube
数组和我原来的 _cubeState
数组。由于 newCube 引用了cubeState,它也会更新原始的。如何修复此问题,以便cubeState 仅在方法返回后更新?
private string[][] _cubeState;
public Rubiks () {
_cubeState = new string[][] {
new [] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" },
new [] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" }
};
_cubeState = RotateAcw (0);
}
public string[][] RotateAcw (int index) {
string[][] newCube = { _cubeState[0], _cubeState[1] };
newCube[0][index] = _cubeState[0][index + 10];
newCube[1][index] = _cubeState[1][index + 10];
return newCube;
}
最佳答案
这是复制锯齿状数组的方法:
string[][] cubeState = new string[][] {
new [] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" },
new [] { "A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F" }
};
string[][] newCube = cubeState.Select(x => x.ToArray()).ToArray();
关于c# - 如何在不更改原始字符串的情况下创建和更改新字符串[][]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56355892/