我尝试了以下操作,但它只返回一个错误的数组。
T[,] ResizeArray<T>(T[,] original, int rows, int cols) { var newArray = new T[rows,cols]; Array.Copy(original, newArray, original.Length); return newArray; }
谢谢托马斯,您的解释非常有帮助,但是您实施的解决方案太慢了。我对其进行了修改,以充分利用Array.Copy。
void ResizeArray<T>(ref T[,] original, int newCoNum, int newRoNum) { var newArray = new T[newCoNum,newRoNum]; int columnCount = original.GetLength(1); int columnCount2 = newRoNum; int columns = original.GetUpperBound(0); for (int co = 0; co <= columns; co++) Array.Copy(original, co * columnCount, newArray, co * columnCount2, columnCount); original = newArray; }
在这里,我假设行多于列,因此我将数组构造为[列,行]。这样一来,我就可以在一列中对整个列使用Array.Copy(一次快于一个单元格)。
它仅可用于增加数组的大小,但也可以对其进行调整以减小大小。