2013-12-13 4 views
3

Я имею проблему разрешения объекта oList с моим CreateObject("System.Collections.ArrayList")VBScript System.Collections.ArrayList Объект не поддерживает ... list.Add

Я получаю ошибку в VBScript

"Microsoft VBScript runtime error: Object doesn't support this property or method: 'list.Add'"

основе this учебник Я знаю, вы можете использовать COM-wrapped. Net компоненты в vbscript; так почему это не будет работать?

Дополнительная информация:

Когда я отладки в VS08 и добавить часы в список, он говорит Children could not be evaluated.

Часы для objNode.value имеет значение строки в два символа. (Что является ожидаемым поведением)

Function ProcessXML(oXML) 
    STOP 
    xPathExemptions= "//Exemption/@ExemptCodeWord" 
    Dim xmlDoc : Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0") 
    xmlDoc.Async = False 
    xmlDoc.loadXML(oXML) 

    Dim colNodes 
    Set colNodes = xmlDoc.selectNodes(xPathExemptions) 
    Dim oList 
    Set oList = CreateObject("System.Collections.ArrayList") 
    Dim objNode 

    For Each objNode in colNodes 
    oList.Add = objNode.value 
    Next 

    'ProcessExemptions = CStr(xmlDoc.selectNodes(xPathExemptions)) 

End Function 

Если у вас есть комментарии к моему vbscript; пожалуйста, дайте мне знать - только начали учиться и не знают лучших практик.

ответ

3

Изменение:

oList.Add = objNode.value 

... чтобы:

oList.Add objNode.value 

или(благодаря руководством @Ansgar)

Call oList.Add(objNode.value) 

Вот демонстрация:

Option Explicit 

Dim oList : Set oList = CreateObject("System.Collections.ArrayList") 

oList.Add "Banana" 
oList.Add "Apple" 
oList.Add "Orange" 
oList.Add "Grapes" 
oList.Add "Plum" 

oList.Sort 

Dim oItem 
For Each oItem In oList 
    WScript.Echo oItem 
Next 

Ожидаемый результат:

Apple 
Banana 
Grapes 
Orange 
Plum 

Вы можете найти больше на причудливых правилах использования скобок с VB и VBScript в Эрике Lippert's informative article.

+0

Я попробую это на работе завтра и дам вам точки успеха. Как странно, что вы вызываете функцию без() операторов, и выполняете задание без a =. Vbscript является ... другим .. Язык –

+0

** xphill64x ** - На самом деле, функция VBScript 'Function' (которая возвращает значение) *** *** требует, чтобы ее аргументы были окружены скобками. Как ни странно, однако, с 'Sub' (который не ** возвращает ** значение), круглые скобки опущены. См. [Мой ответ здесь] (http://stackoverflow.com/a/11371416/1497596) для руководства по загрузке всеобъемлющей ссылки VBScript в виде файла справки Windows. Наконец, обратите внимание, что 'oList.Add' *** является ***' Sub' с единственным аргументом. И это '=' служит двойной роли как оператора присваивания, так и для проверки на равенство. – DavidRR

+1

@DavidRR Нет. Должны ли использоваться круглые скобки, зависит от того, как вызывается процедура или функция. Если * функция * вызывается без оценки возвращаемого значения (например, «MyFunction 23, 42'), то скобки ** не должны использоваться **. OTOH, если вызывается * процедура * с использованием оператора 'Call' (например,' Call MySub (23, 42) '), то ** должны использоваться **. Для получения дополнительной информации см. Статью Эрика Липперта (http://blogs.msdn.com/b/ericlippert/archive/2003/09/15/52996.aspx) на использование круглых скобок в VBScript. –

Смежные вопросы