為效能考量,使用 struct 實作 Enumerator<K, V>,支援 IEnumerator<KeyValuePair<K,V>>、IDictionaryEnumerator、IEnumerator、IDisposable。關鍵欄位:
_ReversibleSortedList:外部集合參考index、version:當前位置與版本號(偵測集合修改)key、value:當前元素快取public bool MoveNext()
{
if (version != _ReversibleSortedList.version)
throw new InvalidOperationException("列舉版本檢查失敗!");
if (index < _ReversibleSortedList.Count)
{
key = _ReversibleSortedList.keys[index];
value = _ReversibleSortedList.values[index];
index++; return true;
}
index = _ReversibleSortedList.Count + 1;
key = default(K); value = default(V);
return false;
}
IEnumerator<KeyValuePair<TKey, TValue>> IEnumerable<KeyValuePair<TKey, TValue>>.GetEnumerator()
=> new Enumerator<TKey, TValue>(this);
IEnumerator IEnumerable.GetEnumerator()
=> new Enumerator<TKey, TValue>(this);
1 b
2 c
3 a
4 f
5 e
6 d
目前仍無法在 foreach 中直接使用 DictionaryEntry,需先實作 IDictionary 介面(下節)。