SettingsPropertyValueCollection.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Sys / System / Configuration / SettingsPropertyValueCollection.cs / 1 / SettingsPropertyValueCollection.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Configuration { 
    using  System.Collections; 
    using  System.Collections.Specialized;
    using  System.Runtime.Serialization; 
    using  System.Configuration.Provider;
    using  System.Globalization;
    using  System.IO;
    using System.Runtime.Serialization.Formatters.Binary; 
    using System.Xml.Serialization;
    using System.ComponentModel; 
    using System.Security.Permissions; 
    using System.Reflection;
 
    //////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////
    public class SettingsPropertyValueCollection : IEnumerable, ICloneable, ICollection
    { 
        private Hashtable _Indices = null;
 
        private ArrayList _Values = null; 

        private bool _ReadOnly = false; 

        ////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////
        public SettingsPropertyValueCollection() 
        {
            _Indices = new Hashtable(10, CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default); 
            _Values = new ArrayList(); 
        }
 
        ////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////
        public void Add(SettingsPropertyValue property)
        { 
            if (_ReadOnly)
                throw new NotSupportedException(); 
 
            int pos = _Values.Add(property);
 
            try
            {
                _Indices.Add(property.Name, pos);
            } 
            catch (Exception)
            { 
                _Values.RemoveAt(pos); 
                throw;
            } 
        }

        ////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////// 
        public void Remove(string name)
        { 
            if (_ReadOnly) 
                throw new NotSupportedException();
 
            object pos = _Indices[name];

            if (pos == null || !(pos is int))
                return; 

            int ipos = (int)pos; 
 
            if (ipos >= _Values.Count)
                return; 

            _Values.RemoveAt(ipos);
            _Indices.Remove(name);
 
            ArrayList al = new ArrayList();
 
            foreach (DictionaryEntry de in _Indices) 
                if ((int)de.Value > ipos)
                    al.Add(de.Key); 

            foreach (string key in al)
                _Indices[key] = ((int)_Indices[key]) - 1;
        } 

        //////////////////////////////////////////////////////////// 
        //////////////////////////////////////////////////////////// 
        public SettingsPropertyValue this[string name]
        { 
            get
            {
                object pos = _Indices[name];
 
                if (pos == null || !(pos is int))
                    return null; 
 
                int ipos = (int)pos;
 
                if (ipos >= _Values.Count)
                    return null;

                return (SettingsPropertyValue)_Values[ipos]; 
            }
        } 
 
        ////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////// 
        public IEnumerator GetEnumerator()
        {
            return _Values.GetEnumerator();
        } 

        //////////////////////////////////////////////////////////// 
        //////////////////////////////////////////////////////////// 
        public object Clone()
        { 
            return new SettingsPropertyValueCollection(_Indices, _Values);
        }

        //////////////////////////////////////////////////////////// 
        ////////////////////////////////////////////////////////////
        public void SetReadOnly() 
        { 
            if (_ReadOnly)
                return; 

            _ReadOnly = true;
            _Values = ArrayList.ReadOnly(_Values);
        } 

        //////////////////////////////////////////////////////////// 
        //////////////////////////////////////////////////////////// 
        public void Clear()
        { 
            _Values.Clear();
            _Indices.Clear();
        }
 
        ////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////// 
        // ICollection interface 
        public int Count { get { return _Values.Count; } }
 
        public bool IsSynchronized { get { return false; } }

        public object SyncRoot { get { return this; } }
 
        public void CopyTo(Array array, int index)
        { 
            _Values.CopyTo(array, index); 
        }
 
        /////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////////
        private SettingsPropertyValueCollection(Hashtable indices, ArrayList values)
        { 
            _Indices = (Hashtable)indices.Clone();
            _Values = (ArrayList)values.Clone(); 
        } 
    }
}
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK