#vb.net
#vb.net
Вопрос:
Я нахожусь в процессе перевода некоторого кода VB на другой язык, но я не понимаю, что здесь должно происходить.
Dim foo(7,0) as Date
Затем позже в коде я получаю что-то вроде foo(5,3)
и я полагаю, что результатом является объект Date. Для описания не написано никакой функции foo
, поэтому я предполагаю, что это многомерный массив. Но использовать в качестве даты? Я в замешательстве, пожалуйста, помогите.
Комментарии:
1. Я предполагаю, что это 2-мерный массив дат. Каждый элемент в массиве будет датой.
2. Вы можете объявить 2D-массив с помощью
Dim foo(,) As Date
или сDim foo As Date(,)
. Эти два фрагмента эквивалентны. Если вы хотите создать массив, вам нужно указать размер. Если вы укажете размер в объявлении, вы можете использовать только первый синтаксис.3. На каком другом языке? Если вы скажете нам, что тогда кто-то, кто знает оба, может рассказать об этом VB в этом и помочь вам понять
4. 2D массив размером 8×1 с датой в качестве типа.
Ответ №1:
Я тоже не знаю, что с ними происходит, потому что это:
Dim foo(7,0) as Date
объявляет двумерный массив, который фактически является одномерным массивом, поскольку второе измерение имеет верхнюю границу 0…
… и затем вы утверждаете, что второе измерение позже индексируется с помощью 3, что выходит за рамки. foo(5, 0)
было бы неплохо, но шестая строка (если вы хотите думать о 5 таким образом) имеет 1 столбец, поэтому извлечение четвертого — это исключение IndexOutOfRangeException. Предположительно, это было ReDim
сделано в какой-то момент между тогда и сейчас
Чтобы отладчик помог вам, запустите код, остановитесь на нем и укажите на foo
или посмотрите в окне LOCALS:
Красным выделена переменная analyzer в качестве всплывающей подсказки и в локальных файлах. Он показывает дату в виде 2D-массива. В нем также услужливо перечислено все содержимое. Синим цветом выделена ошибка, которую вы получите, если попытаетесь получить доступ к индексу 3 массива, который заканчивается на индексе 0
Сделайте так, чтобы этот 2D-массив действительно имел заметную ширину:
И вы можете видеть, что это просто блок даты
Комментарии:
1. Благодаря вам и @jmcilhinney я теперь лучше понимаю, что происходит, и языковые структуры VB. Ваш комментарий «ReDim» помог мне отследить функцию,
foo
которая передавалась по ссылке и изменялась.