Пытаюсь понять и перевести небольшой фрагмент кода VB

#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 которая передавалась по ссылке и изменялась.