C# 如何返回双精度[,]的行的引用
我有一个二维数组,我想返回一个方法中数组行的引用,这样对该行的任何更改都将反映在原始数组中。现在我有了下面的方法,但它返回了新的值实例,因为double被传递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++) {
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我最终实现了锯齿状数组来实现这一点。