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その後、 nullかどうかを確認してください。

于 2013-03-01T23:19:52.310 に答える