Осмысление IEnumerable в .Net COM Interop

Почему я могу использовать VBScript для каждого оператора для итерации объекта 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 of -4).

Я был бы очень признателен, если бы кто-нибудь мог пролить свет на различное поведение COM-взаимодействия этих похожих классов.

Я знаю, что могу использовать другие свойства, предоставляемые SortedList , для перебора коллекции. Я не спрашиваю, как выполнить итерацию SortedList . Я просто спрашиваю, почему IEnumrable , похоже, не реализован в версии взаимодействия SortedList , когда он реализован в версии взаимодействия ArrayList .

7
задан Micha Wiedenmann 4 September 2015 в 08:34
поделиться