我通常使用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'

所需对象: ''


我做错什么了?

最佳答案

将for循环更改为此:

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


有几点需要指出。

使用“设置”分配对象。在VBScript中,将对象分配给变量时,必须如上所述使用Set关键字。

字典不是真正的集合您似乎正在尝试将字典用作序数集合,事实并非如此。脚本字典严格来说是一个关联数组,并且没有可靠的顺序。与.NET字典上的For Each不同,该对象仅返回使用的键的枚举,而不返回KeyValue对。

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

关于asp-classic - 在经典ASP中的字典中使用类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1728464/

10-11 07:19