Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp classic 在经典ASP中使用字典中的类_Asp Classic_Vbscript_Dictionary - Fatal编程技术网

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

Asp classic 在经典ASP中使用字典中的类,asp-classic,vbscript,dictionary,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

我通常做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    
这会在响应上引发错误。写入行:

Microsoft VBScript运行时错误 “800a01a8”

所需对象:“”


我做错了什么?

将for循环更改为:-

For Each key in colPayments
    Set objPayment = colPayments(key)
    Response.Write objPayment.Name
Next
有几件事需要指出

使用Set指定对象。在VBScript中,将对象指定给变量时,必须使用如上所述的
Set
关键字

字典实际上不是一个集合您似乎试图将字典用作序号集合,但它不是。脚本字典严格地说是一个关联数组,没有可靠的顺序。与.NET Dictionary
不同,对象上的每个
只返回使用的键的枚举,而不是键值对


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

或者当使用call call MySyb(p1,p2)Oh调用过程时,您可能会有一个很好的传递值副作用,我多么怀念VBScript的乐趣…ASP与JScript的结合使这变得更加容易,如果您来自C#这应该是一个更好的交换:)谢谢。我假设第一行必须是'For Each key in colPayments.Keys'?我没有使用序数,只是字典需要一个键。另外,调用“使用过程语句时避免括号”也很好。如果需要列表实现,可以在经典ASP中使用.net framework中的“system.collection.arraylist”对象。