我正在尝试用C#自己实现MultiValueDictionary。我在实现IELTS时遇到了问题。
我使用IDictionary<K, HashSet<V>>
作为内部结构。我将字典和哈希集的枚举数分配给字段,并尝试遍历它们。问题是:_keysEnum.Current.Value
总是null,每次我得到空集合。内部字典包含哈希集中的正确值。
public class MultiValueDictionaryEnumerator<K, V> : IEnumerator<KeyValuePair<K, V>>
{
private IDictionary<K, HashSet<V>> _dict;
private IEnumerator<KeyValuePair<K, HashSet<V>>> _keysEnum;
private HashSet<V>.Enumerator _setEnum;
private bool _setEnumInit;
public MultiValueDictionaryEnumerator(IDictionary<K, HashSet<V>> dict)
{
_dict = dict;
Reset();
}
public KeyValuePair<K, V> Current => KeyValuePair.Create(_keysEnum.Current.Key, _setEnum.Current);
object IEnumerator.Current => Current;
public void Dispose()
{
}
public bool MoveNext()
{
var result = false;
if (_setEnumInit)
{
result = _setEnum.MoveNext();
if (!result)
{
result = _keysEnum.MoveNext();
if (result)
{
_setEnum = _keysEnum.Current.Value.GetEnumerator();
}
}
}
return result;
}
public void Reset()
{
_keysEnum = _dict.GetEnumerator();
if (_keysEnum.Current.Value != null)
{
_setEnum = _keysEnum.Current.Value.GetEnumerator();
_setEnumInit = true;
}
}
}
字符串
1条答案
按热度按时间cyvaqqii1#
下面是
IEnumerable<T>
接口的一个实现,它使用了一个iterator。显式实现IEnumerator<T>
接口太麻烦了。字符串