2016-01-21 1 views
0

У меня есть массив байтов, объявленный:Получить общее число элементов в рваной массиве

Dim commands As Byte()() 

Массив позже заполнен кучей байтовых значений, в моем текущем тесте это приводит к прямоугольным 3x3 array (прямолинейность совпадена, массив может содержать байтовые массивы любой длины).

commands = New Byte(3)(){} 
'... 
commands(i) = GetBytes(x) 

Позже я хотел бы получить счетчик общего количества байтов в массиве с зубчатым контуром. Я предположил, Array.Length бы это сделать, поскольку это описание говорит

Общее количество элементов во всех размерах массива

Однако, это, кажется, на самом деле быть возвращающейся только 4; счетчик первого измерения массива, то есть GetLength(0) или количество строк. Array.Count также возвращает то же самое (т. Е. 3).

Правильно ли я понял, что нужно вернуть Array.Length? Если да, то почему он не возвращает 9?

P.S: Я попытался с другими массивами размера и Length, безусловно, возвращение GetLength(0) screenshot showing offending values

+0

Образцы на странице MSDN, на которую вы ссылаетесь, используют 1-2-3d массивы, а не массивы с зазубринами. Похоже, вы ожидаете, что он сканирует * содержимое *, чтобы подсчитать эти элементы? – Plutonix

+0

@Plutonix Hmph, да, своего рода! XD Итак, в основном тип массива в VB действительно такой же глупый, как внутренний тип? – Toby

+1

В трехмерном массиве эти другие измерения на самом деле являются частью объекта массива (т.е. команд), а не в массиве с зазубринами. в этом случае они всего лишь содержание – Plutonix

ответ

1

Правильно ли я понял, что array.length должен вернуться? Если да, то почему он не возвращает 9?

Не совсем. Массив верхнего уровня делает имеет только 3 элемента, что является свойством Length. Просто эти элементы случаются с также быть массивами.

Вам нужно петлю над (или написать Linq запрос и т.д.), чтобы получить общее количество всех массивов, например:

Dim total as Integer = 0 
For Each subarray as Byte() In commands 
    total += subarray.Length 
Next 

Другой вопрос, у вас есть здесь то, что вам есть массив массивов, а не многомерный массив, который будет объявлен как:

Dim commands as Byte(,) 

Это теперь одного массива, где Length недвижимость вернет вам все элементы.

+0

Я понимаю, что вы имеете в виду, но тот факт, что в описании MSDN конкретно говорится о «всех измерениях», подразумевается полная противоположность, не так ли? – Toby

+0

Только что увидел второй комментарий Плутоникса - объясняет это немного больше ... -из. Все еще похоже, что описание * очень * вводит в заблуждение: \ – Toby

+0

@Toby Посмотрите, что вы сейчас говорите - править вверх –