Dlaczego mogę użyć instrukcji VBScript for each
do iterowania obiektu o numerze System.Collections.ArrayList
, ale nie obiektu Systems.Collections.SortedList
?Wyczuwanie IEnumerable w .Net COM Interop
Biorąc pod uwagę następujące elementy:
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
Linia
for each item in sList
wywala z
Obiekt nie obsługuje tej właściwości lub metody *.
Przez Ta nieruchomość Zakładam one oznaczają własność _NewEnum
. Ale dlaczego _NewEnum
jest naświetlone przez ArrayList
, ale nie SortedList
? Obie klasy implementują interfejs IEnumberable
, który z deasemblowania mscorelib.dll
wydaje się być interfejsem odpowiedzialnym za implementację właściwości _NewEnum
(dispId
z -4).
Jeśli ktokolwiek może rzucić trochę światła na różne zachowania międzyoperacyjne COM tych podobnych klas, byłbym bardzo wdzięczny.
Wiem, że mogę użyć innych właściwości narażonych przez SortedList
do iteracji nad kolekcją. Nie pytam, jak wykonać iterację SortedList
. Właśnie pytam, dlaczego IEnumrable
nie wydaje się być zaimplementowane w wersji interopowej SortedList
, gdy jest zaimplementowane w wersji interopowej ArrayList
.