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"
所需对象: ''
我做错了什么?
将你的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个或更多参数时,它将是语法错误.