Чтобы ответить на ваш вопрос относительно того, что на самом деле происходит.
когда я пытаюсь проповедовать неназначенного
Блок вопросов Я получаю Объект, а не
ошибка сбора
Для каждого перечисляет набор вариантов из исходной переменной, он делает это путем получения IEnumVARIANT. Если исходная переменная содержит объект, ожидается, что у него будет реализация этого интерфейса. Если это массив, VBScript создает реализацию динамически, и он может сделать это только в том случае, если массив был измерен. Все остальное в исходной переменной (например, в данном случае пустое) приведет к ошибке.
, тогда назначение завершается неудачно с ошибкой несоответствия типов.
Левая часть операции присваивания всегда должна быть вариантом. Следовательно, невозможно скопировать содержимое одного динамического массива в другой с помощью простого присваивания.
Ваш первый подход достаточно разумный, но вам нужен способ представления пустого массива без сбоя For Each. Вы можете использовать этот маленький трюк: -
Function EmptyArray
EmptyArray = Split("", " ")
End Function
Class Survey
public ID
public Title
public Questions
Private Sub Class_Initialize
Questions = EmptyArray
End Sub
End Class
Теперь, если вы попытаетесь задать каждому из вопросов до того, как ему будет присвоен реальный массив, для каждого из них ничего не будет сделано, как ожидалось. Также, если вы используете UBound (Вопросы) + 1, чтобы получить количество вопросов, которое все еще будет точным, поскольку UBound (EmptyArray) равно -1.