ConfigurationSectionGroupCollection
Represents a collection of ConfigurationSectionGroup objects.
using System.Collections;
using System.Collections.Specialized;
using System.Reflection;
using System.Runtime.CompilerServices;
namespace System.Configuration
{
[DefaultMember("Item")]
public sealed class ConfigurationSectionGroupCollection : NameObjectCollectionBase
{
private readonly ConfigurationSectionGroup _configSectionGroup;
private MgmtConfigurationRecord _configRecord;
public ConfigurationSectionGroup this[string name] {
get {
return Get(name);
}
}
public ConfigurationSectionGroup this[int index] {
get {
return Get(index);
}
}
internal ConfigurationSectionGroupCollection(MgmtConfigurationRecord configRecord, ConfigurationSectionGroup configSectionGroup)
: base(StringComparer.get_Ordinal())
{
_configRecord = configRecord;
_configSectionGroup = configSectionGroup;
IDictionaryEnumerator val = _configRecord.SectionGroupFactories.GetEnumerator();
try {
while (((IEnumerator)val).MoveNext()) {
DictionaryEntry val2 = (DictionaryEntry)((IEnumerator)val).get_Current();
FactoryId factoryId = (FactoryId)val2.get_Value();
if (factoryId.Group == _configSectionGroup.SectionGroupName)
BaseAdd(factoryId.Name, factoryId.Name);
}
} finally {
(val as IDisposable)?.Dispose();
}
}
internal void DetachFromConfigurationRecord()
{
_configRecord = null;
BaseClear();
}
private void VerifyIsAttachedToConfigRecord()
{
if (_configRecord == null)
throw new InvalidOperationException(System.SR.Config_cannot_edit_configurationsectiongroup_when_not_attached);
}
public void Add(string name, ConfigurationSectionGroup sectionGroup)
{
VerifyIsAttachedToConfigRecord();
_configRecord.AddConfigurationSectionGroup(_configSectionGroup.SectionGroupName, name, sectionGroup);
BaseAdd(name, name);
}
public void Clear()
{
VerifyIsAttachedToConfigRecord();
if (_configSectionGroup.IsRoot)
_configRecord.RemoveLocationWriteRequirement();
string[] array = BaseGetAllKeys();
foreach (string name in array) {
Remove(name);
}
}
public void CopyTo(ConfigurationSectionGroup[] array, int index)
{
if (array == null)
throw new ArgumentNullException("array");
int count = Count;
if (array.Length < count + index)
throw new ArgumentOutOfRangeException("index");
int num = 0;
int num2 = index;
while (num < count) {
array[num2] = Get(num);
num++;
num2++;
}
}
public ConfigurationSectionGroup Get(int index)
{
return Get(GetKey(index));
}
public ConfigurationSectionGroup Get(string name)
{
VerifyIsAttachedToConfigRecord();
if (string.IsNullOrEmpty(name))
throw ExceptionUtil.ParameterNullOrEmpty("name");
if (name.Contains('/'))
return null;
string configKey = BaseConfigurationRecord.CombineConfigKey(_configSectionGroup.SectionGroupName, name);
return _configRecord.GetSectionGroup(configKey);
}
[IteratorStateMachine(typeof(<GetEnumerator>d__14))]
public override IEnumerator GetEnumerator()
{
int c = Count;
for (int i = 0; i < c; i++) {
yield return (object)this[i];
}
}
public string GetKey(int index)
{
return BaseGetKey(index);
}
public void Remove(string name)
{
VerifyIsAttachedToConfigRecord();
_configRecord.RemoveConfigurationSectionGroup(_configSectionGroup.SectionGroupName, name);
string text = BaseConfigurationRecord.CombineConfigKey(_configSectionGroup.SectionGroupName, name);
if (!_configRecord.SectionFactories.Contains((object)text))
BaseRemove(name);
}
public void RemoveAt(int index)
{
VerifyIsAttachedToConfigRecord();
Remove(GetKey(index));
}
}
}