Маленькое предисловие, я не про программист, я на самом деле инженер-механик, который знает программирование, и это мой первый вопрос здесь, поэтому, пожалуйста, несите меня. Я как бы просто помещаю грубый сводный код вместо моего фактического кода, чтобы все было просто.Почему это исправляет проблему с моим массивом Jagged?
У меня есть зубчатый массив в vb.net, который я использую для отслеживания того, сколько из некоторых данных соединений проходит через каждую «зону», где зоны являются первым индексом зубчатого массива. Я уже инициализируется массив в другом месте с:
jagged_arr()() = new double(4)() {}
и первый из массивов всегда устанавливается заранее, например:
jagged_arr(0) = {1, 2, 3, 4}
Так позже я пытаюсь перебирать и обрабатывать вещи в зоне, по зоне основе, по существу:
for z = 0 to 3
if z = 2
jagged_arr(z + 1) = jagged_arr(z) 'NOTE!!!
for r = 0 to jagged_arr(z + 1).getUpperBound(0)
'more calcs
jagged_arr(z + 1)(r) += 2
next
end if
next
Вместо того, чтобы дать мне массив я ожидал:
{{1, 2, 3, 4},
{1, 2, 3, 4},
{3, 4, 5, 6},
{3, 4, 5, 6},
{3, 4, 5, 6}}
Я получаю массив так:
{{3, 2, 3, 4},
{3, 2, 3, 4},
{3, 4, 5, 6},
{3, 4, 5, 6},
{3, 4, 5, 6}}
Я очень смущен, почему это произошло. Я еще больше запутался, почему он работал, как предполагалось после того, как я заменил уже отмечалось выше линии (с примечанием !!!) с этим:
jagged_array(z + 1) = new double(jagged_array(z).getUpperBound(0)) {}
for i = 0 to jagged_array(z + 1).getUpperBound(0)
jagged_array(z + 1)(i) = jagged_array(z)(i)
next
Я пропускаю что-то здесь? Я не понимаю, почему каждый массив сначала копирует последнее, вызывая это странное поведение. Любая помощь приветствуется!
Массивы являются ссылочными типами в .NET, а не типами значений. Вы не копируете массив, вы копируете ссылку на *** такой же массив ***. – Comintern