C# 如何返回双精度[,]的行的引用

C# 如何返回双精度[,]的行的引用,c#,arrays,multidimensional-array,C#,Arrays,Multidimensional Array,我有一个二维数组,我想返回一个方法中数组行的引用,这样对该行的任何更改都将反映在原始数组中。现在我有了下面的方法,但它返回了新的值实例,因为double被传递 public double[] GetRowReference(int rowNumber) { double[] output = new double[_allPoints.GetLength(1)]; for (int i = 0; i < _allPoints.GetLength(1); i++) {

我有一个二维数组,我想返回一个方法中数组行的引用,这样对该行的任何更改都将反映在原始数组中。现在我有了下面的方法,但它返回了新的值实例,因为double被传递

public double[] GetRowReference(int rowNumber)
{
    double[] output = new double[_allPoints.GetLength(1)];
    for (int i = 0; i < _allPoints.GetLength(1); i++)
    {
        output[i] = _allPoints[rowNumber, i];
    }
    return output;
}

如何将此行作为引用而不是值返回?

您不能返回一个一维数组,在该数组中,访问一个项将访问另一个二维数组对应行中的项

您所能做的最好的事情是创建您自己的具有该逻辑的类型,并公开一个一维列表的API,即通过IList将每个操作映射到存储的二维列表上的适当操作:

public class ArrayRow<T> : IList<T>
{
    private T[,] array;
    private int row;
    public ArrayRow(T[,] array, int row)
    {
        this.array = array;
        this.row = row;
    }

    public T this[int index]
    {
        get
        {
            return array[row, index];
        }
        set
        {
            array[row, index] = value;
        }
    }

    public int Count
    {
        get { return array.GetLength(1); }
    }

    public IEnumerator<T> GetEnumerator()
    {
        for (int j = 0; j < array.GetLength(1); j++)
            yield return array[row, j];
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }

    //TODO implement remaining IList<T> methods
}

这是不可能的。不幸的是,您最好寻找另一种方法,例如为什么不直接使用2d数组?另一种方法是使用锯齿数组,这样您就可以返回内部数组的引用,但您必须更改部分程序。双精度[]数组=新的双精度[2][];double[]引用=新[]{4d,4,5};数组[1]=引用;参考文献[1]=6@M.kazemAkhgary我试图编写我的API,以便更容易理解行的含义,从而更容易理解引用整个2d数组中给定行的属性。我曾考虑过实现锯齿状数组,但我发现2d数组实现中缺少了一些东西。正如@M.kazemAkhgary所说,锯齿状数组是可能的,但多维数组则不行。@M.kazemAkhgary我最终实现了锯齿状数组来实现这一点。