我有一个二维数组,我想在方法中返回一行数组的引用,以便对该行的任何更改都将反映在原始数组中。现在我有以下方法,但它返回值的新实例,因为传递了双精度。
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;
}
如何将此行作为参考而不是值?
返回答案 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
}