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

edo*_*oft 2 vbscript dictionary asp-classic

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

我已经定义了一个类:

    Class clsPayment    
        Public Name
    End Class

Set objPayment = New clsPayment
objPayment.Name = "StackOverflow payment"    
Run Code Online (Sandbox Code Playgroud)

还有一本字典:

Set colPayments = CreateObject("Scripting.Dictionary")
colPayments.Add 1, objPayment 
Run Code Online (Sandbox Code Playgroud)

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

For i = 0 to colPayments.Count - 1
    objPayment = colPayments.Item(i)
    Response.Write(objPayment.Name)
Next    
Run Code Online (Sandbox Code Playgroud)

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

Microsoft VBScript运行时错误"800a01a8"

所需对象: ''

我做错了什么?

Ant*_*nes 6

将你的for循环更改为: -

For Each key in colPayments
    Set objPayment = colPayments(key)
    Response.Write objPayment.Name
Next
Run Code Online (Sandbox Code Playgroud)

有几点需要指出.

使用"设置"分配对象.在VBScript Set中,在将对象分配给变量时,必须使用上述关键字.

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

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