IEnumerator IEnumerable.GetEnumerator() { var result = new DictionaryEntry[this.FlatCount]; var i = 0; foreach (var kv in this) { foreach (var value in kv.Value) { result[i++] = new DictionaryEntry(kv.Key, value); } } return(result.GetEnumerator()); }
/// <summary> /// Returns an <b>IEnumerator</b> object for this LiteDictionary. /// </summary> /// <returns> /// An <b>IEnumerator</b> object for this LiteDictionary. /// </returns> public virtual IEnumerator GetEnumerator() { DictionaryEntry[] entries = new DictionaryEntry[0]; switch (m_implType) { case LiteDictionaryType.Empty: return(entries.GetEnumerator()); case LiteDictionaryType.Single: DictionaryEntry entry = (DictionaryEntry)m_contents; entries = new DictionaryEntry[1]; entries[0] = entry; return(entries.GetEnumerator()); case LiteDictionaryType.Array1: case LiteDictionaryType.Array2: case LiteDictionaryType.Array3: case LiteDictionaryType.Array4: case LiteDictionaryType.Array5: case LiteDictionaryType.Array6: case LiteDictionaryType.Array7: case LiteDictionaryType.Array8: entries = (DictionaryEntry[])m_contents; int c = m_implType - LiteDictionaryType.Array1 + 1; DictionaryEntry[] result = new DictionaryEntry[c]; Array.Copy(entries, 0, result, 0, c); return(result.GetEnumerator()); case LiteDictionaryType.Other: return(((IDictionary)m_contents).GetEnumerator()); default: throw new InvalidOperationException(); } }