我通常做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'
需要对象:''
我做错了什么?
答案 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个或更多参数时,它将是语法错误。