如何返回双行的引用[,]

时间:2015-11-05 21:36:19

标签: c# arrays multidimensional-array

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

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;
}

如何将此行作为参考而不是值?

返回

1 个答案:

答案 0 :(得分:0)

您无法返回单维数组,其中访问项目会访问另一个二维数组的相应行中的项目。

您可以做的最好的事情是创建具有该逻辑的您自己的类型,并公开单个列表的API(即通过IList<T>),您可以在其中将每个操作映射到适当的操作存储的二维列表:

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
}