我希望能够做到:
1 2
| For Each thing In things
End For |
经典ASP-不是.NET!
像这样吗
1 2 3 4 5 6 7 8
| dim cars(2),x
cars(0)="Volvo"
cars(1)="Saab"
cars(2)="BMW"
For Each x in cars
response.write(x &"<br />")
Next |
参见www.w3schools.com。
如果要关联键和值,请使用字典对象:
1 2 3 4 5 6 7 8 9
| Dim objDictionary
Set objDictionary = CreateObject("Scripting.Dictionary")
objDictionary.Add"Name","Scott"
objDictionary.Add"Age","20"
if objDictionary.Exists("Name") then
' Do something
else
' Do something else
end if |
无论您需要什么,都需要在VBScript之外编写。
在VB6中,您可以编写一个Custom Collection类,然后需要编译为ActiveX DLL并在Web服务器上注册它才能访问它。
您将获得的最接近的是使用字典(如Pacifika所述)
1 2 3 4 5
| Dim objDictionary
Set objDictionary = CreateObject("Scripting.Dictionary")
objDictionary.CompareMode = vbTextCompare 'makes the keys case insensitive'
objDictionary.Add"Name","Scott"
objDictionary.Add"Age","20" |
但是我像集合一样浏览字典
1 2 3
| For Each Entry In objDictionary
Response.write objDictionary(Entry) &"<br />"
Next |
您可以用这种方法遍历整个字典,写出看起来像这样的值:
您也可以这样做
1 2 3
| For Each Entry In objDictionary
Response.write Entry &":" & objDictionary(Entry) &"<br />"
Next |
哪个会产生
我之前使用的一种方法是使用返回数组的集合的属性,该数组可以迭代。
1 2 3 4 5 6
| Class MyCollection
Public Property Get Items
Items = ReturnItemsAsAnArray()
End Property
...
End Class |
像这样迭代:
1 2 3 4
| Set things = New MyCollection
For Each thing in things.Items
...
Next |
在使用VB脚本字典对象时要非常小心!
只需发现此对象本身具有的"自动生存"功能即可:http://en.wikipedia.org/wiki/Autovivification
因此,当您需要比较值时,切勿使用布尔型比较,例如:
If objDic.Item("varName") <>"" Then ...
这将自动将键" varName"添加到字典中(如果它不存在,则为空值),以便进行布尔表达式的求值。
如果需要,请改用If objDic.Exists("varName")。
只需花几天的时间就可以将Mcrosoft的"功能"推倒墙了...
vbscript词典对象创建一个从未存在但存在于另一个对象中的密钥
如Brett所说,最好使用vb组件创建集合。除非针对基于特定需求的应用程序,否则词典对象在ASP中不是很常用。