#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)
этого