在经典ASP中使用字典中的类

时间:2009-11-13 10:43:13

标签: asp-classic vbscript dictionary

我通常做C#但继承了一个经典的ASP项目。

我定义了一个类:

    Class clsPayment    
        Public Name
    End Class

Set objPayment = New clsPayment
objPayment.Name = "StackOverflow payment"    

还有一本字典:

Set colPayments = CreateObject("Scripting.Dictionary")
colPayments.Add 1, objPayment 

稍后读取对象时,我无法调用公共字段:

For i = 0 to colPayments.Count - 1
    objPayment = colPayments.Item(i)
    Response.Write(objPayment.Name)
Next    

这会在Response.Write行引发错误:

  

Microsoft VBScript运行时错误   '800a01a8'

     

需要对象:''

我做错了什么?

1 个答案:

答案 0 :(得分:6)

将您的for循环更改为: -

For Each key in colPayments
    Set objPayment = colPayments(key)
    Response.Write objPayment.Name
Next

有几点需要指出。

使用“设置”指定对象。在VBScript中,在将对象分配给变量时,必须使用上面的Set关键字。

字典实际上并不是一个集合您似乎试图将字典用作序数集合,但事实并非如此。 Scripting字典严格来说是一个关联数组,没有可靠的排序。与.NET字典For Each不同,该对象返回的枚举只是使用的密钥而不是KeyValue对..

使用过程语句时避免使用括号请注意,对Response.Write的调用缺少了parantheses。虽然当只有一个参数(它被解释为表达式)时,您经常会看到这些成功使用,但当需要2个或更多参数时,它将是语法错误。