Да, это длинный и запутанный заголовок ... извините.
Я работаю в VBScript в хорошем старомодном ASP. У меня есть объект словаря, и каждый объект в словаре состоит из его ключа и массива в качестве элемента.
Dim myDictionary
Set myDictionary = CreateObject("Scripting.Dictionary")
myDictionary.Add "a", Array("a1","a2")
myDictionary.Add "b", Array("b1","b2")
myDictionary.Add "c", Array("c1","c2")
Я также передаю в сценарий список строк (и преобразование в массив), которые соответствуют различным словарным статьям, так что только эти записи могут отображаться на странице и в порядке расположения массива.
Dim myText
myText = "a, b, c"
Dim myArray
myArray = Split(myText,",")
Теперь я хочу перебрать массив и показать содержимое каждого соответствующего ключа в myDictionary.
For Each thing in myArray
Response.Write myDictionary.Item(thing)(0) & " " & myDictionary.Item(thing)(1) & "<br />" & vbcrlf
Next
Отлично работает в первой итерации и правильно печатает на странице. Но на 2-й итерации я получаю ошибку. Вот полный вывод на странице:
a1 a2
Ошибка выполнения Microsoft VBScript
'800a000d' Несоответствие типов: 'Item (...)'
/ Alpine / en_us / testCase.asp, строка 28
Кто-нибудь знает, почему это не работает? Естественно, код, показанный здесь, является просто тестовым примером, но у меня точно такая же проблема в моем приложении.
Вот полный код, так что вы можете просто вставить его в свою тестовую среду, если он поможет мне разобраться в этом:
<%@LANGUAGE="VBSCRIPT"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Iterating through Dictionary objects - Test Case</title>
</head>
<body>
<%
Dim myDictionary
Set myDictionary = CreateObject("Scripting.Dictionary")
myDictionary.Add "a", Array("a1","a2")
myDictionary.Add "b", Array("b1","b2")
myDictionary.Add "c", Array("c1","c2")
Dim myText
myText = "a, b, c"
Dim myArray
myArray = Split(myText,",")
For Each thing in myArray
Response.Write myDictionary.Item(thing)(0) & " " & myDictionary.Item(thing)(1) & "<br />" & vbcrlf
Next
%>
</body>
</html>
Некоторые другие интересные сведения об этой проблеме ...
Когда я жестко кодирую все три словарные записи внутри итераций, все работает нормально:
For Each thing in myArray
Response.Write myDictionary.Item("a")(0) & " " & myDictionary.Item("a")(1) & "<br />" & vbcrlf
Response.Write myDictionary.Item("b")(0) & " " & myDictionary.Item("b")(1) & "<br />" & vbcrlf
Response.Write myDictionary.Item("c")(0) & " " & myDictionary.Item("c")(1) & "<br />" & vbcrlf
Next
Производит это:
a1 a2
b1 b2
с1 с2
а1 а2
b1 b2
с1 с2
a1 a2
b1 b2
с1 с2
И чтобы убедиться, что переменная 'вещь' в цикле For-Each работает:
For Each thing in myArray
Response.Write thing
Next
Производит это:
a b c
Я в замешательстве ...
Спасибо всем! Я действительно ценю любую помощь, которую вы можете оказать. : -)
Приветствия
Lelando