.NET Framework Class Library
ConfigurationSectionCollection Class

Represents a collection of related sections within a configuration file.

Inheritance Hierarchy
SystemObject
   System.Collections.SpecializedNameObjectCollectionBase
    System.ConfigurationConfigurationSectionCollection

Namespace:   System.Configuration
Assembly:  System.Configuration (in System.Configuration.dll)
Syntax
<[%$TOPIC/wfda1bhk_en-us_VS_110_2_0_0_0_0%]> _
Public NotInheritable Class ConfigurationSectionCollection _
	Inherits [%$TOPIC/wfda1bhk_en-us_VS_110_2_0_0_0_1%]
[[%$TOPIC/wfda1bhk_en-us_VS_110_2_0_1_0_0%]]
public sealed class ConfigurationSectionCollection : [%$TOPIC/wfda1bhk_en-us_VS_110_2_0_1_0_1%]
[[%$TOPIC/wfda1bhk_en-us_VS_110_2_0_2_0_0%]]
public ref class ConfigurationSectionCollection sealed : public [%$TOPIC/wfda1bhk_en-us_VS_110_2_0_2_0_1%]
[<[%$TOPIC/wfda1bhk_en-us_VS_110_2_0_3_0_0%]>]
[<[%$TOPIC/wfda1bhk_en-us_VS_110_2_0_3_0_1%]>]
type ConfigurationSectionCollection =  
    class 
        inherit [%$TOPIC/wfda1bhk_en-us_VS_110_2_0_3_0_2%] 
    end

The ConfigurationSectionCollection type exposes the following members.

Properties
  NameDescription
Public property CountGets the number of sections in this ConfigurationSectionCollection object. (Overrides NameObjectCollectionBaseCount.)
Public property ItemInt32Gets the specified ConfigurationSection object.
Public property ItemStringGets the specified ConfigurationSection object.
Public property KeysGets the keys to all ConfigurationSection objects contained in this ConfigurationSectionCollection object. (Overrides NameObjectCollectionBaseKeys.)
Top
Methods
  NameDescription
Public method AddAdds a ConfigurationSection object to the ConfigurationSectionCollection object.
Public method ClearClears this ConfigurationSectionCollection object.
Public method CopyToCopies this ConfigurationSectionCollection object to an array.
Public method Equals(Object)Determines whether the specified object is equal to the current object. (Inherited from Object.)
Public method Get(Int32)Gets the specified ConfigurationSection object contained in this ConfigurationSectionCollection object.
Public method Get(String)Gets the specified ConfigurationSection object contained in this ConfigurationSectionCollection object.
Public method GetEnumeratorGets an enumerator that can iterate through this ConfigurationSectionCollection object. (Overrides NameObjectCollectionBaseGetEnumerator.)
Public method GetHashCodeServes as the default hash function. (Inherited from Object.)
Public method GetKeyGets the key of the specified ConfigurationSection object contained in this ConfigurationSectionCollection object.
Public method GetObjectDataUsed by the system during serialization. (Overrides NameObjectCollectionBaseGetObjectData(SerializationInfo, StreamingContext).)
Public method GetTypeGets the Type of the current instance. (Inherited from Object.)
Public method OnDeserializationImplements the ISerializable interface and raises the deserialization event when the deserialization is complete. (Inherited from NameObjectCollectionBase.)
Public method RemoveRemoves the specified ConfigurationSection object from this ConfigurationSectionCollection object.
Public method RemoveAtRemoves the specified ConfigurationSection object from this ConfigurationSectionCollection object.
Public method ToStringReturns a string that represents the current object. (Inherited from Object.)
Top
Explicit Interface Implementations
  NameDescription
Explicit interface implemetation Private method ICollectionCopyToCopies the entire NameObjectCollectionBase to a compatible one-dimensional Array, starting at the specified index of the target array. (Inherited from NameObjectCollectionBase.)
Explicit interface implemetation Private property ICollectionIsSynchronizedGets a value indicating whether access to the NameObjectCollectionBase object is synchronized (thread safe). (Inherited from NameObjectCollectionBase.)
Explicit interface implemetation Private property ICollectionSyncRootGets an object that can be used to synchronize access to the NameObjectCollectionBase object. (Inherited from NameObjectCollectionBase.)
Top
Remarks

Use the ConfigurationSectionCollection class to iterate through a collection of ConfigurationSection objects. You can access this collection of objects using the Sections property or the Sections property.

The ConfigurationSectionCollection class is also used in the creation of custom types that extend the ConfigurationSection class.

Examples

The following code example shows how to use the ConfigurationSectionCollection class.

Imports System
Imports System.Configuration
Imports System.Collections




' Define a custom section programmatically. 

Public NotInheritable Class CustomSection
    Inherits ConfigurationSection
    ' The collection (property bag) that contains  
    ' the section properties. 
    Private Shared _Properties _
    As ConfigurationPropertyCollection


    ' The FileName property. 
    Private Shared _FileName _
    As New ConfigurationProperty("fileName", _
    GetType(String), "default.txt", _
    ConfigurationPropertyOptions.IsRequired)

    ' The MasUsers property. 
    Private Shared _MaxUsers _
    As New ConfigurationProperty("maxUsers", _
    GetType(Long), Fix(1000), _
    ConfigurationPropertyOptions.None)

    ' The MaxIdleTime property. 
    Private Shared _MaxIdleTime _
    As New ConfigurationProperty("maxIdleTime", _
    GetType(TimeSpan), TimeSpan.FromMinutes(5), _
    ConfigurationPropertyOptions.IsRequired)


    ' CustomSection constructor. 
    Public Sub New()
        ' Property initialization
        _Properties = _
        New ConfigurationPropertyCollection()

        _Properties.Add(_FileName)
        _Properties.Add(_MaxUsers)
        _Properties.Add(_MaxIdleTime)
    End Sub 'New 


    ' This is a key customization.  
    ' It returns the initialized property bag. 
    Protected Overrides ReadOnly Property Properties() _
    As ConfigurationPropertyCollection
        Get 
            Return _Properties
        End Get 
    End Property



    <StringValidator( _
    InvalidCharacters:=" ~!@#$%^&*()[]{}/;'""|\", _
    MinLength:=1, MaxLength:=60)> _
    Public Property FileName() As String 
        Get 
            Return CStr(Me("fileName"))
        End Get 
        Set(ByVal value As String)

            Me("fileName") = value
        End Set 
    End Property


    <LongValidator(MinValue:=1, _
    MaxValue:=1000000, ExcludeRange:=False)> _
    Public Property MaxUsers() As Long 
        Get 
            Return Fix(Me("maxUsers"))
        End Get 
        Set(ByVal value As Long)
            Me("maxUsers") = value
        End Set 
    End Property


    <TimeSpanValidator(MinValueString:="0:0:30", _
    MaxValueString:="5:00:0", ExcludeRange:=False)> _
    Public Property MaxIdleTime() As TimeSpan
        Get 
            Return CType(Me("maxIdleTime"), TimeSpan)
        End Get 
        Set(ByVal value As TimeSpan)
            Me("maxIdleTime") = value
        End Set 
    End Property 
End Class 'CustomSection 




Class UsingCustomSectionCollection


    ' Create a custom section. 
    Shared Sub CreateSection()
        Try 

            Dim customSection As CustomSection

            ' Get the current configuration file. 
            Dim config _
            As System.Configuration.Configuration = _
            ConfigurationManager.OpenExeConfiguration( _
            ConfigurationUserLevel.None)

            ' Create the section entry   
            ' in the <configSections> and the  
            ' related target section in <configuration>. 
            If config.Sections("CustomSection") Is Nothing Then
                customSection = New CustomSection()
                config.Sections.Add("CustomSection", customSection)
                customSection.SectionInformation.ForceSave = True
                config.Save(ConfigurationSaveMode.Full)
            End If 
        Catch err As ConfigurationErrorsException
            Console.WriteLine(err.ToString())
        End Try 
    End Sub 'CreateSection


    Shared Sub GetAllKeys()

        Try 
            Dim config _
            As System.Configuration.Configuration = _
            ConfigurationManager.OpenExeConfiguration( _
            ConfigurationUserLevel.None)


            Dim sections _
            As ConfigurationSectionCollection = _
            config.Sections

            Dim key As String 
            For Each key In sections.Keys
                Console.WriteLine("Key value: {0}", key)
            Next key


        Catch err As ConfigurationErrorsException
            Console.WriteLine(err.ToString())
        End Try 
    End Sub 'GetAllKeys



    Shared Sub Clear()

        Try 
            Dim config _
            As System.Configuration.Configuration = _
            ConfigurationManager.OpenExeConfiguration( _
            ConfigurationUserLevel.None)

            config.Sections.Clear()

            config.Save( _
            ConfigurationSaveMode.Full)
        Catch err As ConfigurationErrorsException
            Console.WriteLine(err.ToString())
        End Try 
    End Sub 'Clear


    Shared Sub GetSection()

        Try 
            Dim customSection _
            As CustomSection = _
            ConfigurationManager.GetSection( _
            "CustomSection")

            If customSection Is Nothing Then
                Console.WriteLine("Failed to load CustomSection.")
            Else 
                ' Display section information
                Console.WriteLine("Defaults:")
                Console.WriteLine("File Name:       {0}", _
                customSection.FileName)
                Console.WriteLine("Max Users:       {0}", _
                customSection.MaxUsers)
                Console.WriteLine("Max Idle Time:   {0}", _
                customSection.MaxIdleTime)
            End If 


        Catch err As ConfigurationErrorsException
            Console.WriteLine(err.ToString())
        End Try 
    End Sub 'GetSection

    Shared Sub GetEnumerator()

        Try 
            Dim config _
            As System.Configuration.Configuration = _
            ConfigurationManager.OpenExeConfiguration( _
            ConfigurationUserLevel.None)

            Dim sections _
            As ConfigurationSectionCollection = _
            config.Sections

            Dim secEnum _
            As IEnumerator = sections.GetEnumerator()

            Dim i As Integer = 0
            While secEnum.MoveNext()
                Dim setionName _
                As String = sections.GetKey(i)
                Console.WriteLine( _
                "Section name: {0}", setionName)
                i += 1
            End While 
        Catch err As ConfigurationErrorsException
            Console.WriteLine(err.ToString())
        End Try 
    End Sub 'GetEnumerator


    Shared Sub GetKeys()

        Try 
            Dim config _
            As System.Configuration.Configuration = _
            ConfigurationManager.OpenExeConfiguration( _
            ConfigurationUserLevel.None)

            Dim sections _
            As ConfigurationSectionCollection = _
            config.Sections


            Dim key As String 
            For Each key In sections.Keys


                Console.WriteLine("Key value: {0}", key)
            Next key


        Catch err As ConfigurationErrorsException
            Console.WriteLine(err.ToString())
        End Try 
    End Sub 'GetKeys


    Shared Sub GetItems()

        Try 
            Dim config _
            As System.Configuration.Configuration = _
            ConfigurationManager.OpenExeConfiguration( _
            ConfigurationUserLevel.None)

            Dim sections _
            As ConfigurationSectionCollection = _
            config.Sections


            Dim section1 As ConfigurationSection = _
            sections.Item("runtime")

            Dim section2 As ConfigurationSection = _
            sections.Item(0)

            Console.WriteLine("Section1: {0}", _
            section1.SectionInformation.Name)

            Console.WriteLine("Section2: {0}", _
            section2.SectionInformation.Name)

        Catch err As ConfigurationErrorsException
            Console.WriteLine(err.ToString())
        End Try 
    End Sub 'GetItems


    Shared Sub Remove()

        Try 
            Dim config _
            As System.Configuration.Configuration = _
            ConfigurationManager.OpenExeConfiguration( _
            ConfigurationUserLevel.None)

            Dim customSection As CustomSection = _
            config.GetSection("CustomSection")


            If Not (customSection Is Nothing) Then
                config.Sections.Remove("CustomSection")
                customSection.SectionInformation.ForceSave = True
                config.Save(ConfigurationSaveMode.Full)
            Else
                Console.WriteLine( _
                "CustomSection does not exists.")
            End If 

        Catch err As ConfigurationErrorsException
            Console.WriteLine(err.ToString())
        End Try 
    End Sub 'Remove


    Shared Sub AddSection()

        Try 
            Dim config _
            As System.Configuration.Configuration = _
            ConfigurationManager.OpenExeConfiguration( _
            ConfigurationUserLevel.None)

            Dim customSection _
            As New CustomSection()


            Dim index As String = _
            config.Sections.Count.ToString()

            customSection.FileName = _
            "newFile" + index + ".txt" 

            Dim sectionName As String = _
            "CustomSection" + index

            Dim ts As New TimeSpan(0, 15, 0)
            customSection.MaxIdleTime = ts
            customSection.MaxUsers = 100

            config.Sections.Add(sectionName, customSection)
            customSection.SectionInformation.ForceSave = True
            config.Save(ConfigurationSaveMode.Full)
        Catch err As ConfigurationErrorsException
            Console.WriteLine(err.ToString())
        End Try 
    End Sub 'AddSection



    ' Exercise the collection. 
    ' Uncomment the function you want to exercise. 
    ' Start with CreateSection(). 
    Public Overloads Shared Sub Main(ByVal args() As String)
        CreateSection()
        ' AddSection() 
        ' GetSection() 
        ' GetEnumerator() 
        ' GetAllKeys() 
        ' GetKeys()
        GetItems()
        ' Clear() 
        ' Remove() 
    End Sub 'Main 

End Class 'UsingCustomSectionCollection 
using System;
using System.Configuration;
using System.Collections;

namespace Samples.AspNet.Configuration
{


    // Define a custom section programmatically. 
    public sealed class CustomSection :
        ConfigurationSection
    {
        // The collection (property bag) that contains  
        // the section properties. 
        private static ConfigurationPropertyCollection _Properties;


        // The FileName property. 
        private static readonly ConfigurationProperty _FileName =
            new ConfigurationProperty("fileName",
            typeof(string), "default.txt",
            ConfigurationPropertyOptions.IsRequired);

        // The MasUsers property. 
        private static readonly ConfigurationProperty _MaxUsers =
            new ConfigurationProperty("maxUsers",
            typeof(long), (long)1000,
            ConfigurationPropertyOptions.None);

        // The MaxIdleTime property. 
        private static readonly ConfigurationProperty _MaxIdleTime =
            new ConfigurationProperty("maxIdleTime",
            typeof(TimeSpan), TimeSpan.FromMinutes(5),
            ConfigurationPropertyOptions.IsRequired);

        // CustomSection constructor. 
        public CustomSection()
        {
            // Property initialization
            _Properties =
                new ConfigurationPropertyCollection();

            _Properties.Add(_FileName);
            _Properties.Add(_MaxUsers);
            _Properties.Add(_MaxIdleTime);
        }


        // This is a key customization.  
        // It returns the initialized property bag. 
        protected override ConfigurationPropertyCollection Properties
        {
            get
            {
                return _Properties;
            }
        }



        [StringValidator(InvalidCharacters = " ~!@#$%^&*()[]{}/;'\"|\\",
            MinLength = 1, MaxLength = 60)]
        public string FileName
        {
            get
            {
                return (string)this["fileName"];
            }
            set
            {

                this["fileName"] = value;
            }
        }

        [LongValidator(MinValue = 1, MaxValue = 1000000,
            ExcludeRange = false)]
        public long MaxUsers
        {
            get
            {
                return (long)this["maxUsers"];
            }
            set
            {
                this["maxUsers"] = value;
            }
        }

        [TimeSpanValidator(MinValueString = "0:0:30",
            MaxValueString = "5:00:0",
            ExcludeRange = false)]
        public TimeSpan MaxIdleTime
        {
            get
            {
                return (TimeSpan)this["maxIdleTime"];
            }
            set
            {
                this["maxIdleTime"] = value;
            }
        }


    }


    class UsingCustomSectionCollection
    {

        // Create a custom section. 
        static void CreateSection()
        {
            try
            {

                CustomSection customSection;

                // Get the current configuration file.
                System.Configuration.Configuration config =
                        ConfigurationManager.OpenExeConfiguration(
                        ConfigurationUserLevel.None);

                // Create the section entry   
                // in the <configSections> and the  
                // related target section in <configuration>. 
                if (config.Sections["CustomSection"] == null)
                {
                    customSection = new CustomSection();
                    config.Sections.Add("CustomSection", customSection);
                    customSection.SectionInformation.ForceSave = true;
                    config.Save(ConfigurationSaveMode.Full);
                }
            }
            catch (ConfigurationErrorsException err)
            {
                Console.WriteLine(err.ToString());
            }

        }

        static void GetAllKeys()
        {

            try
            {
                System.Configuration.Configuration config =
                ConfigurationManager.OpenExeConfiguration(
                ConfigurationUserLevel.None);


                ConfigurationSectionCollection sections =
                    config.Sections;

                foreach (string key in sections.Keys)
                {
                    Console.WriteLine(
                     "Key value: {0}", key);
                }


            }
            catch (ConfigurationErrorsException err)
            {
                Console.WriteLine(err.ToString());
            }
        }


        static void Clear()
        {

            try
            {
                System.Configuration.Configuration config =
                ConfigurationManager.OpenExeConfiguration(
                ConfigurationUserLevel.None);

                config.Sections.Clear();

                config.Save(ConfigurationSaveMode.Full);
            }
            catch (ConfigurationErrorsException err)
            {
                Console.WriteLine(err.ToString());
            }
        }


        static void GetSection()
        {

            try
            {
                CustomSection customSection =
                    ConfigurationManager.GetSection(
                    "CustomSection") as CustomSection;

                if (customSection == null)
                    Console.WriteLine(
                        "Failed to load CustomSection.");
                else
                {
                    // Display section information
                    Console.WriteLine("Defaults:");
                    Console.WriteLine("File Name:       {0}",
                        customSection.FileName);
                    Console.WriteLine("Max Users:       {0}",
                        customSection.MaxUsers);
                    Console.WriteLine("Max Idle Time:   {0}",
                        customSection.MaxIdleTime);

                }

            }
            catch (ConfigurationErrorsException err)
            {
                Console.WriteLine(err.ToString());
            }
        }

        static void GetEnumerator()
        {

            try
            {
                System.Configuration.Configuration config =
                ConfigurationManager.OpenExeConfiguration(
                ConfigurationUserLevel.None);


                ConfigurationSectionCollection sections =
                    config.Sections;

                IEnumerator secEnum =
                    sections.GetEnumerator();

                int i = 0;
                while (secEnum.MoveNext())
                {
                    string setionName = sections.GetKey(i);
                    Console.WriteLine(
                        "Section name: {0}", setionName);
                    i += 1;
                }
            }
            catch (ConfigurationErrorsException err)
            {
                Console.WriteLine(err.ToString());
            }
        }


        static void GetKeys()
        {

            try
            {
                System.Configuration.Configuration config =
                ConfigurationManager.OpenExeConfiguration(
                ConfigurationUserLevel.None);

                ConfigurationSectionCollection sections =
                    config.Sections;


                foreach (string key in sections.Keys)
                {


                    Console.WriteLine(
                     "Key value: {0}", key);
                }


            }
            catch (ConfigurationErrorsException err)
            {
                Console.WriteLine(err.ToString());
            }
        }


        static void GetItems()
        {

            try
            {
                System.Configuration.Configuration config =
                ConfigurationManager.OpenExeConfiguration(
                ConfigurationUserLevel.None);

                ConfigurationSectionCollection sections =
                    config.Sections;


                ConfigurationSection section1 =
                    sections["runtime"];

                ConfigurationSection section2 =
                    sections[0];

                Console.WriteLine(
                     "Section1: {0}", section1.SectionInformation.Name);

                Console.WriteLine(
                    "Section2: {0}", section2.SectionInformation.Name);

            }
            catch (ConfigurationErrorsException err)
            {
                Console.WriteLine(err.ToString());
            }
        }


        static void Remove()
        {

            try
            {
                System.Configuration.Configuration config =
                ConfigurationManager.OpenExeConfiguration(
                ConfigurationUserLevel.None);

                CustomSection customSection =
                    config.GetSection(
                    "CustomSection") as CustomSection;


                if (customSection != null)
                {
                    config.Sections.Remove("CustomSection");
                    customSection.SectionInformation.ForceSave = true;
                    config.Save(ConfigurationSaveMode.Full);
                }
                else
                    Console.WriteLine(
                        "CustomSection does not exists.");

            }
            catch (ConfigurationErrorsException err)
            {
                Console.WriteLine(err.ToString());
            }
        }


        static void AddSection()
        {

            try
            {
                System.Configuration.Configuration config =
                ConfigurationManager.OpenExeConfiguration(
                ConfigurationUserLevel.None);

                CustomSection customSection =
                    new CustomSection();


                string index =
                    config.Sections.Count.ToString();

                customSection.FileName =
                    "newFile" + index + ".txt";

                string sectionName = "CustomSection" + index;

                TimeSpan ts = new TimeSpan(0, 15, 0);
                customSection.MaxIdleTime = ts;
                customSection.MaxUsers = 100;

                config.Sections.Add(sectionName, customSection);
                customSection.SectionInformation.ForceSave = true;
                config.Save(ConfigurationSaveMode.Full);
            }
            catch (ConfigurationErrorsException err)
            {
                Console.WriteLine(err.ToString());
            }
        }


        // Exercise the collection. 
        // Uncomment the function you want to exercise. 
        // Start with CreateSection(). 
        static void Main(string[] args)
        {
            CreateSection();
            // AddSection(); 
            // GetSection(); 
            // GetEnumerator(); 
            // GetAllKeys(); 
            // GetKeys(); 
            // GetItems(); 

            // Remove(); 
            // Clear();
        }


    }
}

The following example is an excerpt of the configuration file used by the previous example.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>

    <section name="CustomSection" 
      type="Samples.AspNet.Configuration.CustomSection, ConfigurationSectionCollection, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" restartOnExternalChanges="true" />

  </configSections>

  <CustomSection fileName="default.txt" maxUsers="1000" 
    maxIdleTime="00:05:00" />

</configuration>
Version Information

.NET Framework

Supported in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1
Platforms

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Thread Safety
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.