在包装器字典类和包装器Key结构中实现IEnumerable.GetEnumerator()

本文关键字:包装 IEnumerable 实现 GetEnumerator Key 字典 结构 | 更新日期: 2023-09-27 18:05:51

我把这个结构体包含在

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
}

我试图在class1中模拟(实现)我的_class2Manager字典的字典功能。当我想实现GetEnumerator()方法时,问题就出现了。我不完全确定如何将_class2Manager.GetEnumerator()返回的IEnumerator<KeyValuePair<Key, Class2>>对象转换为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>> ?

我想过转换,但我不认为这是正确转换它所需要做的确切的事情。

在包装器字典类和包装器Key结构中实现IEnumerable.GetEnumerator()

GetEnumerator()函数的代码中,您可以尝试:

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

这基本上只是将字典中每个条目的Key转换为Key1

当你想把一个对象序列从一种类型映射到另一种类型时,你可以使用Select:

return _class2Manager.Select(pair => 
        new KeyValuePair<Key1, Class2>(pair.Key.TKeyValue, pair.Value))
    .GetEnumerator();