为什么我可以使用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
属性。但为什么ArrayList
会公开_NewEnum
属性,而SortedList
不会呢?这两个类都实现了IEnumberable
接口,从反汇编mscorelib.dll
中可以看出,该接口负责实现_NewEnum
属性(dispId
为-4)。
如果有人能解释这些相似类之间的不同COM互操作行为,我会非常感激。
我知道我可以使用SortedList
公开的其他属性来迭代集合。 我只是想问为什么在互操作版本的SortedList
中没有实现IEnumrable
,而在互操作版本的ArrayList
中已经实现了。