c#将1维数组分配给2维数组语法

m3n*_*tat 13 c# arrays multidimensional-array

我想做的事情如下:

object[] rowOfObjects = GetRow();//filled somewhere else
object[,] tableOfObjects = new object[10,10];

tableOfObjects[0] = rowOfObjects;
Run Code Online (Sandbox Code Playgroud)

这有点可能,语法是什么?

或者我需要这样做:

for (int i = 0; i < rowOfObjects.Length; i++)
{
   tableOfObjects[0,i] = rowOfObjects[i];
}
Run Code Online (Sandbox Code Playgroud)

并使用循环填充二维数组行?

谢谢

Mat*_*lay 10

如果您的数组是值类型数组,则可以.

int[,] twoD = new int[2, 2] {
    {0,1},
    {2,3}
};
int[] oneD = new int[2] 
    { 4, 5 };
int destRow = 1;
Buffer.BlockCopy(
    oneD, // src
    0, // srcOffset
    twoD, // dst
    destRow * twoD.GetLength(1) * sizeof(int), // dstOffset
    oneD.Length * sizeof(int)); // count
// twoD now equals
// {0,1},
// {4,5}
Run Code Online (Sandbox Code Playgroud)

对象数组是不可能的.

注意:从.net3.5开始,这只适用于基元数组.


Guf*_*ffa 8

不,如果你使用的是二维数组,那是不可能的.您必须复制每个项目.

如果你使用锯齿状数组,它可以正常工作:

// create array of arrays
object[][] tableOfObject = new object[10][];
// create arrays to put in the array of arrays
for (int i = 0; i < 10; i++) tableOfObject[i] = new object[10];

// get row as array
object[] rowOfObject = GetRow();
// put array in array of arrays
tableOfObjects[0] = rowOfObjects;
Run Code Online (Sandbox Code Playgroud)

如果您将所有数据作为行获取,那么您当然不需要将数组放入数组数组的循环,因为您无论如何都要替换它们.

  • 对象[,]是二维数组,它总是矩形的(所有行都是相同的长度).object [] []是一个锯齿状数组; 一个object []数组的数组.由于每行本身就是一个数组,因此它们的长度不必相同. (3认同)