The Labs \ Source Viewer \ SSCLI \ System.Configuration \ KeyValueConfigurationCollection

  1. //------------------------------------------------------------------------------
  2. // <copyright file="KeyValueConfigurationCollection.cs" company="Microsoft">
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. // </copyright>
  14. //------------------------------------------------------------------------------
  15. namespace System.Configuration
  16. {
  17.     using System;
  18.     using System.Xml;
  19.     using System.Configuration;
  20.     using System.Collections.Specialized;
  21.     using System.Collections;
  22.     using System.IO;
  23.     using System.Text;
  24.    
  25.     [ConfigurationCollection(typeof(KeyValueConfigurationElement))]
  26.     public class KeyValueConfigurationCollection : ConfigurationElementCollection
  27.     {
  28.         private static ConfigurationPropertyCollection _properties;
  29.        
  30.         static KeyValueConfigurationCollection()
  31.         {
  32.             // Property initialization
  33.             _properties = new ConfigurationPropertyCollection();
  34.         }
  35.        
  36.         protected internal override ConfigurationPropertyCollection Properties {
  37.             get { return _properties; }
  38.         }
  39.        
  40.        
  41.         //
  42.         // Constructor
  43.         //
  44.         public KeyValueConfigurationCollection() : base(StringComparer.OrdinalIgnoreCase)
  45.         {
  46.             internalAddToEnd = true;
  47.         }
  48.        
  49.         //
  50.         // Accessors
  51.         //
  52.         protected override bool ThrowOnDuplicate {
  53.             get { return false; }
  54.         }
  55.        
  56.         public new KeyValueConfigurationElement this[string key]
  57.         {
  58.             get { return (KeyValueConfigurationElement)BaseGet(key); }
  59.         }
  60.        
  61.         public string[] AllKeys {
  62.             get { return StringUtil.ObjectArrayToStringArray(BaseGetAllKeys()); }
  63.         }
  64.        
  65.         //
  66.         // Methods
  67.         //
  68.        
  69.         public void Add(KeyValueConfigurationElement keyValue)
  70.         {
  71.             // Need to initialize in order to get the key
  72.             keyValue.Init();
  73.            
  74.             // the appsettings add works more like a namevalue collection add in that it appends values
  75.             // when add is called and teh key already exists.
  76.             KeyValueConfigurationElement oldValue = (KeyValueConfigurationElement)BaseGet(keyValue.Key);
  77.             if (oldValue == null) {
  78.                 BaseAdd(keyValue);
  79.             }
  80.             else {
  81.                 oldValue.Value += "," + keyValue.Value;
  82.                 int index = BaseIndexOf(oldValue);
  83.                 BaseRemoveAt(index);
  84.                 BaseAdd(index, oldValue);
  85.             }
  86.            
  87.            
  88.         }
  89.        
  90.         public void Add(string key, string value)
  91.         {
  92.             KeyValueConfigurationElement element = new KeyValueConfigurationElement(key, value);
  93.             Add(element);
  94.         }
  95.        
  96.        
  97.         public void Remove(string key)
  98.         {
  99.             BaseRemove(key);
  100.         }
  101.        
  102.         public void Clear()
  103.         {
  104.             BaseClear();
  105.         }
  106.        
  107.         protected override ConfigurationElement CreateNewElement()
  108.         {
  109.             return new KeyValueConfigurationElement();
  110.         }
  111.        
  112.         protected override object GetElementKey(ConfigurationElement element)
  113.         {
  114.             return ((KeyValueConfigurationElement)element).Key;
  115.         }
  116.     }
  117. }

Developer Fusion