vbScript System.Collections.ArrayList对象不支持... list.Add

3
我有一个问题,使用CreateObject("System.Collections.ArrayList")无法解析oList对象。
在vbscript中出现错误:
"Microsoft VBScript runtime error: Object doesn't support this property or method: 'list.Add'"
根据这个教程,我知道你可以在vbscript中使用COM包装的.Net组件,为什么这样做不起作用?
额外信息:
当我在VS08中进行调试并添加一个对列表的观察时,它会显示“无法评估子项”。 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有任何评论,请告诉我 - 我刚开始学习,不知道最佳实践。
1个回答

3

改变:

oList.Add = objNode.value

...to:

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

您可以在Eric Lippert的信息文章中了解有关VB和VBScript使用括号的古怪规则。


明天我会在工作中尝试这个,并在成功后给你积分。很奇怪,你在没有()运算符的情况下调用函数,并且你在没有=的情况下进行赋值。VBScript是一种...不同的语言。 - user1741874
xphill64x - 实际上,一个返回值的VBScript Function确实需要将其参数用括号括起来。然而,对于不返回值的Sub,括号被省略了。请参见我的答案 ,以获取有关下载作为Windows帮助文件的全面VBScript参考的指导。最后,请注意,oList.Add是具有单个参数的Sub=既是赋值运算符,也用于测试相等性。 - DavidRR
1
@DavidRR 不需要。是否需要使用括号取决于过程或函数的调用方式。如果调用一个函数而不评估返回值(例如MyFunction 23, 42),则不应使用括号。另一方面,如果使用Call语句调用过程(例如Call MySub(23, 42)),则必须使用括号。有关更多信息,请参见Eric Lippert的文章,了解在VBScript中使用括号的方法。 - Ansgar Wiechers
@Ansgar - 感谢您指向Eric的信息文章。更多关于括号和VBScript的讨论请参见此答案 - DavidRR
@DavidRR 我接受了你的答案,但我还没有测试过这段代码。因为我必须走另一条路——客户端可能没有安装.NET,所以我不得不使用自定义数组.vbs。一旦我们放弃XP支持,这将会非常有用!感谢提供的信息! - user1741874

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接