-1

私はこの構造体を内に含んでいます

public class Class1<TKey1> : IDictionary<TKey1, Class2>
{
    #region Private Fields
    private Dictionary<Key, Class2> _class2Manager = new Dictionary<Key, Class2>(new KeyEqualityComparer());
    #endregion

    #region Key
    protected internal struct Key
    {
        private TKey1 _TKeyValue1;

        public TKey1 TKeyValue
        {
            get { return _TKeyValue1; }
            set { _TKeyValue1 = value; }
        }
        public Key(TKey1 keyValue)
        {
            _TKeyValue1 = keyValue;
        }
        ///Other Key Code
    }
    #endregion
    ///Other Class1 Code
}

_class2Manager内で辞書の辞書機能をエミュレート(実装)しようとしていますclass1GetEnumerator()メソッドを実装したいときに問題が発生します。IEnumerator<KeyValuePair<Key, Class2>> によって返されたオブジェクトをに_class2Manager.GetEnumerator()変換する方法が正確にはわかりませんIEnumerator<KeyValuePair<TKey1, Class2>>

IEnumerator<KeyValuePair<TKey1, Class2>> IEnumerable<KeyValuePair<TKey1, Class2>>.GetEnumerator()
{
    IEnumerator<KeyValuePair<Key, Class2>> K = _class2Manager.GetEnumerator();
}

IEnumerator<KeyValuePair<Key, Class2>>に変換するにはどうすればよいIEnumerator<KeyValuePair<TKey1, Class2>>ですか?

私はキャストを考えましたが、それを適切に変換するために私がしなければならないことは正確ではないと思います。

どんな提案でもありがたいです、ありがとう。

4

2 に答える 2

1

関数のコードで、次のGetEnumerator()ことを試すことができます。

foreach (KeyValuePair<Key, Class2>> entry in _MasterFrames)
    yield return new KeyValuePair<Key1, Class2>(entry.Key.TKeyValue, entry.Value);

これは、基本的に、辞書の各エントリに対してそれぞれKeyをに変換するだけです。Key1

于 2013-03-25T16:01:03.053 に答える
0

あるタイプから別のタイプにオブジェクトのシーケンスをマップする場合は、次を使用できますSelect

return _class2Manager.Select(pair => 
        new KeyValuePair<Key1, Class2>(pair.Key.TKeyValue, pair.Value))
    .GetEnumerator();
于 2013-03-25T17:40:20.880 に答える