c# jagged array 改变自身

c# jagged array changes itself

我 运行 遇到了问题。我创建了一个锯齿状数组(输入),然后我通过一些函数并期望从中创建另一个锯齿状数组(输出)。但是在那个过程中不知何故原始数组也被改变了。 如何避免改变原始数组?

double[][] input;
    double[][] output;
    private void button1_Click(object sender, EventArgs e)
    {
        input = new double[][]
        {
            new double[] {0,1,2,3 },
            new double[] {9,8 },
            new double[] {14,5,0 },
            new double[] {2.0,2.3,2.5 }
        };
        output = function(input);
    }
    static double[][] function (double[][] ins)
    {
        double[][] ous = ins;
        int leng = ins.GetLength(0);
        for (int i = 0; i < leng; i++)
        {
            int lung = ins[i].GetLength(0);
            for (int j = 0; j < lung; j++)
                ous[i][j] += 14.4;
        }
        return ous;
    }

问题是 ous 变量指向与 ins 相同的数组(参考)。您应该将其复制到新阵列。例如使用 linq:

static T[][] CopyArray<T>(T[][] source)
{
    return source.Select(s => s.ToArray()).ToArray();
}

并使用它:

double[][] ous = CopyArray(ins);