SettingsPropertyCollection
Contains a collection of SettingsProperty objects.
using System.Collections;
namespace System.Configuration
{
public class SettingsPropertyCollection : IEnumerable, ICloneable, ICollection
{
private readonly Hashtable _hashtable;
private bool _readOnly;
public SettingsProperty this[string name] {
get {
return _hashtable[name] as SettingsProperty;
}
}
public int Count => _hashtable.Count;
public bool IsSynchronized => false;
public object SyncRoot => this;
public SettingsPropertyCollection()
{
_hashtable = new Hashtable(10, StringComparer.CurrentCultureIgnoreCase);
}
public void Add(SettingsProperty property)
{
if (_readOnly)
throw new NotSupportedException();
OnAdd(property);
_hashtable.Add(property.Name, property);
try {
OnAddComplete(property);
} catch {
_hashtable.Remove(property.Name);
throw;
}
}
public void Remove(string name)
{
if (_readOnly)
throw new NotSupportedException();
SettingsProperty settingsProperty = (SettingsProperty)_hashtable[name];
if (settingsProperty != null) {
OnRemove(settingsProperty);
_hashtable.Remove(name);
try {
OnRemoveComplete(settingsProperty);
} catch {
_hashtable.Add(name, settingsProperty);
throw;
}
}
}
public IEnumerator GetEnumerator()
{
return _hashtable.Values.GetEnumerator();
}
public object Clone()
{
return new SettingsPropertyCollection(_hashtable);
}
public void SetReadOnly()
{
if (!_readOnly)
_readOnly = true;
}
public void Clear()
{
if (_readOnly)
throw new NotSupportedException();
OnClear();
_hashtable.Clear();
OnClearComplete();
}
protected virtual void OnAdd(SettingsProperty property)
{
}
protected virtual void OnAddComplete(SettingsProperty property)
{
}
protected virtual void OnClear()
{
}
protected virtual void OnClearComplete()
{
}
protected virtual void OnRemove(SettingsProperty property)
{
}
protected virtual void OnRemoveComplete(SettingsProperty property)
{
}
public void CopyTo(Array array, int index)
{
_hashtable.Values.CopyTo(array, index);
}
private SettingsPropertyCollection(Hashtable h)
{
_hashtable = (Hashtable)h.Clone();
}
}
}