public bool MoveNext() { if (Location == Position.Before) { if (First == IntPtr.Zero) { Location = Position.After; } else { _current = new DictEntry(First); Location = Position.During; } } else if (Location == Position.During) { if (_current.Next == IntPtr.Zero) { _current = null; Location = Position.After; } else { _current = new DictEntry(Interop.DictNextEntry(_current.Handle)); } } return(Location == Position.During); }