示例#1
0
        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();
            }
        }