无法从SortedList获取枚举器

时间:2013-03-01 23:17:12

标签: c# sortedlist enumerator

我有这个对象:

class Animation
    {
        //[...]
        private SortedList<int,Frame> frames = new SortedList<int,Frame>();
        private IDictionaryEnumerator frameEnumerator = null;

        //[...]

        public void someFunction() {
            frameEnumerator = frames.GetEnumerator(); //throw error
        }

        //[...]

}

我在那里查看msn文档:http://msdn.microsoft.com/en-us/library/system.collections.sortedlist.getenumerator.aspx,看起来我的代码是正确的,但VS说:

  

无法转换   System.Collections.Generic.IEnumerator&GT;”   到'System.Collections.IDictionaryEnumerator'。

2 个答案:

答案 0 :(得分:4)

IDictionaryEnumerator类型用于较旧的非泛型集合类型。在这种情况下,您有一个强类型集合,它将返回IEnumerater<KeyValuePair<int, Frame>>。请改用该类型

private IEnumerator<KeyValuePair<int, Frame>> frameEnumerator = null;

注意:SortedList<TKey, TValue>的枚举器类型确实实现了IDictionaryEnumerator接口。如果您真的喜欢那个,可以使用显式转换来访问它

frameEnumerator = (IDictionaryEnumerator)frames.GetEnumerator();

我会避开这条路线。最好使用强类型接口,避免在代码中进行不必要的转换。

答案 1 :(得分:0)

尝试施放

frameEnumerator = frames.GetEnumerator() as IDictionaryEnumerator;

之后,请确保检查frameEnumerator是否为空。