C#-使用引用调整锯齿数组的大小

C#-使用引用调整锯齿数组的大小,c#,resize,ref,jagged-arrays,C#,Resize,Ref,Jagged Arrays,我已经写了一个小项目,将读取多个CSV文件到一个锯齿阵列(每个CSV在一个锯齿阵列)。 所有数组都将存储在一个列表中。之后,我有一个给定的维度,我想调整每个数组的大小(使用给定的列和行)。 守则: private void resizeArray( double[][] matrixToResize, int maxRow, int maxColumn) { Array.Resize(ref matrixToResize, maxRow); fo

我已经写了一个小项目,将读取多个CSV文件到一个锯齿阵列(每个CSV在一个锯齿阵列)。 所有数组都将存储在一个列表中。之后,我有一个给定的维度,我想调整每个数组的大小(使用给定的列和行)。 守则:

    private void resizeArray( double[][] matrixToResize, int maxRow, int maxColumn)
    {
        Array.Resize(ref matrixToResize, maxRow);

        for (int i = 0; i < matrixToResize.Length; i++)
        {
            Array.Resize(ref matrixToResize[i], maxColumn);
        }
    }

    private void resizeArrayList(List<double[][]> csvList, Dimension dimension)
    {
        foreach (Double[][] matrix in csvList)
        {
            resizeArray(matrix, dimension.Max_Rows, dimension.Max_Columns);
        }
    }
private void resizeArray(双[][]矩阵大小、int-maxRow、int-maxColumn)
{
调整数组大小(参考matrixToResize,maxRow);
for(int i=0;i
resizeArrayList
将被称为1。然后调用
resizeArray
来调整行的大小,然后为每行调整给定数量的列

我的问题:
resizeArray
中,所有这些都可以正常工作,例如: 我有一个5行5列的数组,需要10行10列

我首先将这个数组的大小调整为10行,然后将每行调整为10列。在
resizeArray
返回到
resizeArrayList
之前,看起来不错,我有10行,每10列。但是在代码返回到方法resizeArrayList之后,它有5行,每行有10(!)列。因此,基本上,列大小调整工作正常,但添加的5行消失了,恢复到原来的行大小

我知道我可以通过将整个锯齿状数组传递回去并将其读入列表来解决这个问题。但为什么会这样呢


两次我都对ref使用resize函数。但它只保存列,而不保存调整大小的行。

您必须通过引用传递
矩阵
变量,因为引用本身正在
resizeArray
方法中修改。在执行此操作的方式中,
csvList
列表的所有元素保持不变-长度为5的数组-因为
csvList
仍然由旧引用组成,即调整大小之前的引用

但是,
matrix
是循环变量,您不能在循环内更改它,这意味着您不能通过引用将其传递给
resizeArray
。因此,我认为您最好创建一个全新的列表,结果是:

private double[][] resizeArray(double[][] matrixToResize,
                               int maxRow, int maxColumn)
{
    Array.Resize(ref matrixToResize, maxRow);

    for (int i = 0; i < matrixToResize.Length; i++)
    {
        Array.Resize(ref matrixToResize[i], maxColumn);
    }

    return matrixToResize;
}

private void resizeArrayList(List<double[][]> csvList, Dimension dimension)
{
    csvList = csvList
        .Select(matrix => 
            resizeArray(matrix, dimension.Max_Rows, dimension.Max_Columns))
        .ToList();
}
private double[]]resizeArray(double[]]matrixToResize,
int maxRow,int maxColumn)
{
调整数组大小(参考matrixToResize,maxRow);
for(int i=0;i
调整数组大小(矩阵、dimension.Max_行、dimension.Max_列))
.ToList();
}

啊,这很有道理!非常感谢你澄清这一点,我很困惑!谢谢祝您有个美好的一天