在包装器字典类和包装器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>>
?
我想过转换,但我不认为这是正确转换它所需要做的确切的事情。
在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();