c# - 如何在不更改原始字符串的情况下创建和更改新字符串[][]?

标签 c#

我知道这是由引用而不是值传递引起的问题,但我不确定需要做什么来解决它。

我有一个字段变量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/

相关文章:

c# - 按带有额外列的问题分组

c# - 处理 Newtonsoft.JSON 中的 "(null)"值

c# - Redis 缓存静态列表按过滤器搜索

C# 将负 int 转换为 11 位

c# - 对于在 ASP.NET Web 角色中执行的套接字读取循环来说,缓冲区大小越大越好吗?

c# - 找不到与命令 "dotnet-/app/Build\ClearPluginAssemblies.dll"Docker 匹配的可执行文件

c# - 在NAudio中解码GSM 6.10部件

c# - 如何使用凭据通过客户端对象模型连接到 SharePoint 列表?

c# - 具有可空参数调用具体类型的泛型重载方法

c# - Xamarin Android 应用遇到未找到类 ... 在路径 : DexPathList[[zip file . ..]...]