1

我有这个对象:

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>' 转换为 'System.Collections.IDictionaryEnumerator'。

4

2 回答 2

4

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

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

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

frameEnumerator = (IDictionaryEnumerator)frames.GetEnumerator();

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

于 2013-03-01T23:19:19.970 回答
0

尝试投

frameEnumerator = frames.GetEnumerator() as IDictionaryEnumerator;

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

于 2013-03-01T23:19:52.310 回答