Странный оператор многомерного массива VB6

#vb6

#vb6

Вопрос:

Просматривая очень старый рабочий код VB6, я получаю очень странное утверждение.

 aryValue = aryPersons(8, i)
  

Где aryValue и aryPersons являются многомерным массивом и объявляются как

 dim aryPersons, aryValue
  

У кого-нибудь есть идеи, что это делает?
Я попробовал то же самое в тестовом приложении, но это дает Type mismatch (Error 13)

ОТВЕТ: Я плохо понимаю код VB, поскольку я ожидал, что это будет язык строгого типа данных. На самом деле при aryPersons(8, i) хранении двухмерного массива и при его извлечении используются данные 2D-массива, которые можно легко назначить aryValue , поскольку это также 2D-массив. Мне странно, что в 2D-массиве в любой позиции вы храните любые данные, даже другие 2D-данные.

Комментарии:

1. Если aryStepPersonOptions это многомерный массив, это позволяет получить доступ к элементу в этом массиве по адресу (8, i) , где i предположительно является целочисленной переменной, содержащей индекс массива. Но нам действительно нужно было бы увидеть больше контекста, чтобы быть уверенным.

2. @CodyGray какой еще контекст вам нужен, я постараюсь вам предоставить.

3. Не могли бы вы опубликовать код, в котором aryPersons присваивается значение или в котором оно переопределяется?

Ответ №1:

Кажется вероятным, что aryStepPersonOptions в качестве значения используется массив:

 Dim SomeArray(8, 8) As String
Dim aryStepPersonOptions, aryValue
Dim i As Long

SomeArray(8, 8) = "Hello"
aryStepPersonOptions = SomeArray
i = 8
aryValue = aryStepPersonOptions(8, i)
MsgBox aryValue
  

Конечно, используемый псевдовенгерский ary префикс, похоже, вносит больше путаницы, чем в противном случае. К сожалению, слишком много кода содержит подобные беспорядки, связанные с грузом. Будем надеяться, что никто не скопирует / не вставит и мой одноразовый пример SomeArray .

Комментарии:

1. Да, aryStepPersonOptions имеет свое значение из другой функции. Пока здесь это правильно, и я предположил, что после aryValue = aryStepPersonOptions(8, i) aryValue может стать как строка, но я задрожал, увидев ‘UBound (sryValue)’ сразу после. `

2. Можете ли вы попробовать UBound(aryValue) после aryValue = aryStepPersonOptions(8, i) этого