【问题标题】:vbScript System.Collections.ArrayList Object does not support... list.AddvbScript System.Collections.ArrayList 对象不支持... list.Add
【发布时间】:2013-12-13 20:47:51
【问题描述】:

我在使用 CreateObject("System.Collections.ArrayList") 解析 oList 对象时遇到问题

我在 vbscript 中遇到的错误

“Microsoft VBScript 运行时错误:对象不支持此属性或方法:'list.Add'”

基于this 教程,我知道您可以在 vbscript 中使用 COM 包装的 .Net 组件;那么为什么这不起作用呢?

其他信息:

当我在 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 上有任何 cmets;请告诉我 - 刚开始学习,不知道最佳实践。

【问题讨论】:

    标签: .net arraylist vbscript


    【解决方案1】:

    更改:

    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
    

    您可以在 Eric Lippert 的informative article 中找到更多关于 VB 和 VBScript 的使用括号的古怪规则

    【讨论】:

    • 我明天在工作中试试这个,成功后会给你积分。你调用一个没有 () 运算符的函数并且你做一个没有 a = 的赋值是多么奇怪。 Vbscript 是一种……不同的……语言
    • xphill64x - 实际上,VBScript Function(它返回一个值)确实要求它的参数是用括号括起来。不过奇怪的是,对于 Sub(它确实 not 返回一个值),括号被省略了。请参阅my answer here 以获取有关将全面的 VBScript 参考下载为 Windows 帮助文件的指导。最后,请注意 oList.Add is 是带有单个参数的 Sub。而= 兼具赋值运算符和相等性测试的双重作用。
    • @DavidRR 否。是否必须使用括号取决于调用过程或函数的方式。如果在没有评估返回值的情况下调用 函数(例如 MyFunction 23, 42),则不能使用圆括号 。 OTOH,如果使用Call 语句(例如Call MySub(23, 42))调用过程,则必须使用括号。有关在 VBScript 中使用括号的更多信息,请参阅 Eric Lippert's article
    • @Ansgar - 感谢您提供指向 Eric 内容丰富的文章的指针。在this answer 中有更多关于括号和VBScript 使用的讨论。
    • @DavidRR 我接受了你的回答;我还没有测试过代码。我不得不换个方向——客户端机器可能没有安装.NET,所以我不得不去使用自定义的array.vbs。一旦我们放弃 XP 支持;不过这会派上用场的!感谢您的信息!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 2020-11-24
    • 2015-02-22
    • 1970-01-01
    相关资源
    最近更新 更多