В Майкрософт документации VarType
MSDN для VarType
функции VBScript в это говорит (с жирным акцентом):Почему VarType() всегда возвращает 8204 для Массивы
«Замечание Функция VarType никогда не возвращает значение массива самых . Он всегда добавляется к некоторому другому значению, чтобы указать массив из определенного типа. Значение для Variant возвращается только тогда, когда оно добавлено к значению для Array, чтобы указать, что аргумент функции VarType является массивом . Например, значение, возвращаемое для массива рассчитывается как 2 + 8192, или 8194. Если объект имеет свойство по умолчанию, VarType (объект) возвращает тип своего имущества по умолчанию .»
НО
код, такой как
Dim A,I1, I2, I3
I1 = 1
I2 = 2
I3 = 3
A = Array(I1,I2,I3)
Dim A2
A2 = Split("Test,Test,Test",",")
AT = VarType(A)
AT2 = VarType(A2)
IT1 = VarType(I1)
IT2 = VarType(I2)
IT3 = VarType(I3)
WScript.Echo IT1
WScript.Echo IT2
WScript.Echo IT3
WScript.Echo AT & " - 8192 = " & AT - 8192
WScript.Echo AT2 & " - 8192 = " & AT2 - 8192
WScript.Echo CStr(VarType(A(2)))
возвращается
2
2
2
8204 - 8192 = 12
8204 - 8192 = 12
2
I1
- I3
ВСЕ возвращают свои proper vbInteger
И, ссылаясь индивидуально в свой массив, ТАКЖЕ возвращают vbInteger
, но массив настаивает, что это массив из vbVariant
.
Если я не полностью отсутствует что-то здесь, кажется, что в НЕСМОТРЯ документации нет никакого способа, чтобы создать массив, где элементы являются ВСЕ ЖЕ типа и иметь VarType
распознает его как угодно, но только массив vbVariant
,
Я чувствую, что это уже должен быть вопрос, но я подошел пустой поиск здесь, поэтому не стесняйтесь связываться, если я пропустил существующие вопросы.
В документации должно быть указано: «_Arrays_ всегда имеют тип« vbVariant + vbArray' ». Непараметрические переменные и элементы массива могут быть любым подтипом Variant. – Bond
@Bond, нет, документация правильная. 'VarType' возвращает тип для массива. Вы не можете создать целочисленный массив в самом VBScript, но запрос на свойство или вызов метода COM-компоненту может вернуть его, и 'VarType' будет правильно идентифицировать тип данных. –
Справа.Думаю, мы на одной странице. _VBScript сам_ может создавать только массивы 'vbArray + vbVariant' (Array(), Dim, массивы, возвращаемые из функций VBScript и т. Д.), Независимо от того, являются ли элементы однородными. Я не говорю, что вы не можете получить массив non-vbVariant из других средств. Объект «ADO Stream», например, может возвращать массивы 'vbArray + vbByte (UI1)'. – Bond