¿Por qué puedo usar la instrucción VBScript for each
para iterar un objeto System.Collections.ArrayList
, pero no un objeto Systems.Collections.SortedList
?Dando sentido a IEnumerable en .Net COM Interop
Teniendo en cuenta lo siguiente:
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
La línea
for each item in sList
accidentes con
objeto no admite esta propiedad o método *.
Por esta propiedad supongo que significan la propiedad _NewEnum
. Pero ¿por qué _NewEnum
está expuesto por ArrayList
, pero no SortedList
? Ambas clases implementan la interfaz IEnumberable
que desde el desmontaje mscorelib.dll
parece ser la interfaz responsable de implementar la propiedad _NewEnum
(dispId
de -4).
Si alguien puede arrojar algo de luz sobre el comportamiento de interoperabilidad COM diferente de estas clases similares, estaría muy agradecido.
Sé que puedo usar otras propiedades expuestas por SortedList
para iterar sobre la colección. No estoy preguntando cómo iterar un SortedList
. Solo estoy preguntando por qué IEnumrable
no parece implementarse en la versión de interoperabilidad de SortedList
cuando se implementa en la versión de interoperabilidad de ArrayList
.