копировать значения из массива Object[,] в массив Object[][]

#c# #arrays #asp.net-mvc

#c# #массивы #asp.net-mvc

Вопрос:

У меня есть два массива:

  • массив object[,]
  • object[][] Массив.

Я хочу скопировать значения из object[,] массива в object[][] массив.

Я пробовал что-то подобное

 object[,] array1 = new object[arraySize, 4]; //Here are some values inside
object[][] array2 = new object[arraySize][];


for (int i = 0; i < arraySize; i  )
{
    array2[i][0] = array1[i, 0];
    array2[i][1] = array1[i, 1];
    array2[i][2] = array1[i, 2];
    array2[i][3] = array1[i, 3];
    
}
  

Но я получил NullReferenceException :

Ссылка на объект не установлена для экземпляра объекта.

Комментарии:

1. Вы неправильно указали направление своих назначений.

2. И почему вы используете arrayCounter2 , а не просто i ?

3. я отредактировал, спасибо

Ответ №1:

 array2[i][0] = array1[i, 0];
  

Здесь у вас есть исключение с нулевой ссылкой, поскольку array2[i] оно равно null . Вам необходимо инициализировать каждый элемент array2 , прежде чем вы сможете использовать.

Зубчатый массив представляет собой массив массивов, и поэтому его элементы являются ссылочными типами и инициализируются значением null.

документация Microsoft

 // In your code, `arraySize` correspond to the numbers of rows in a multidimensional array. 
// In this example, rows = 2, columns = 4.
object[,] array1 = new object[2, 4] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } };
object[][] array2 = new object[2][] { new object[4], new object[4] };

for (int x = 0; x < 2; x  )
{
    for (int y = 0; y < 4; y  )
    {
        array2[x][y] = array1[x, y];
    }
}

// print array2
for (int i = 0; i < array2.Length; i  )
{
    Console.WriteLine(string.Join(",", array2[i]));
}

Console.ReadLine();
       
  

Ответ №2:

Попробуйте это:

 for (int i = 0; i < array1.GetLength(0); i  )
{
    array2[i] = new object[array1.GetLength(1)]; // array2[i] is null initially
    for(int j = 0; j < array1.GetLength(1); j  ) {           
        array2[i][j] = array1[i, j];
    }
}
  

Попробуйте это здесь:
https://dotnetfiddle.net/f1XUXI

Комментарии:

1. так, но получил то же исключение: исключение NullReferenceException: ссылка на объект не установлена для экземпляра объекта.

2. Я добавил скрипку, чтобы вы могли увидеть ее в действии.