我正在创建一个实现IDictionary接口的字典数据结构。在实施GetEnumerator方法时,我陷入了困境。我有一个枚举器,它给出了KeyValuePair实例,但是从我发现的内容来看,我必须实现IDictionaryEnumerator。
有没有一种简单的方法可以将KeyValuePair枚举器转换为IDictionaryEnumerator?我知道我可以做以下黑客攻击:
IDictionaryEnumerator GetEnumerator()
{
return new Dictionary(this.KeyValueEnumerator()).GetEnumerator();
}
但它加载所有枚举数据似乎非常低效。
答案 0 :(得分:0)
鉴于您告诉我们您的KeyValueEnumerator()
返回IEnumerator<KeyValuePair<,>>
// This you told us you have
public IEnumerator<KeyValuePair<TKey, TValue>> KeyValueEnumerator()
{
return something;
}
我构建了一个公开MyDictionaryEnumerator
接口
IDictionaryEnumerator
// This is what you need
public IDictionaryEnumerator GetEnumerator()
{
return new MyDictionaryEnumerator(KeyValueEnumerator());
}
public class MyDictionaryEnumerator : IDictionaryEnumerator
{
public MyDictionaryEnumerator(IEnumerator<KeyValuePair<TKey, TValue>> enumerator)
{
Enumerator = enumerator;
}
public IEnumerator<KeyValuePair<TKey, TValue>> Enumerator;
public DictionaryEntry Entry
{
get { return new DictionaryEntry(Enumerator.Current.Key, Enumerator.Current.Value); }
}
public object Key
{
get { return Enumerator.Current.Key; }
}
public object Value
{
get { return Enumerator.Current.Value; }
}
public object Current
{
get { return Entry; }
}
public bool MoveNext()
{
return Enumerator.MoveNext();
}
public void Reset()
{
Enumerator.Reset();
}
}
MyDictionaryEnumerator
是一个非常简单的类,它围绕KeyValueEnumerator()
来回建立DictionaryEntry
个对象和/或Key
和Value
(我我会说它是Adapter Pattern)