#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.
// 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. Я добавил скрипку, чтобы вы могли увидеть ее в действии.