Почему я могу использовать оператор VBScript for each
для итерации объекта System.Collections.ArrayList
, но не объекта Systems.Collections.SortedList
?
Учитывая следующее:
set aList = Server.CreateObject("System.Collections.ArrayList")
aList.Add "a"
aList.Add "b"
aList.Add "c"
for each item in aList
' do something
next
set sList = Server.CreateObject("System.Collections.SortedList")
sList.Add "a", 1
sList.Add "b", 2
sList.Add "c", 3
for each item in sList
' do something
next
Линия
for each item in sList
падает с
объект не поддерживает это свойство или метод *.
По это свойство Я предполагаю, что они имеют в виду свойство _NewEnum
. Но почему _NewEnum
выставляется ArrayList
, а не SortedList
? Оба класса реализуют интерфейс IEnumberable
, который после дизассемблирования mscorelib.dll
представляется интерфейсом, отвечающим за реализацию свойства _NewEnum
(dispId
из -4).
Если кто-нибудь сможет пролить свет на различное поведение COM-взаимодействия этих похожих классов, я был бы очень признателен.
Я знаю, что могу использовать другие свойства, предоставляемые SortedList
, для перебора коллекции. Я не спрашиваю, как перебрать SortedList
. Я просто спрашиваю, почему IEnumrable
не реализовано в версии взаимодействия SortedList
, когда оно реализовано в версии взаимодействия ArrayList
.