Wenn Sie eigene ConfigurationElementCollection-Ableitungen implementieren, müssen Sie die GetElementKey-Methode überschreiben, die einen Schlüssel liefert, über den das angegebene ConfigurationElement-Objekt aus der Auflistung abgerufen werden kann. Meistens entsteht dabei Code, der dem Folgenden Beispiel ähnlich sein könnte…

using System.Configuration;
...
protected override object GetElementKey(ConfigurationElement element)
{
  CustomConfigurationElement elt;
  if ((elt = element as CustomConfigurationElement) != null)
    return elt.Key;

  return null;
}

Da ich in den meisten meiner Projekten stehts verschiedenste ConfigurationCollection-Klassen entstehen und ich Redundanzen gern vermeiden möchte, nutze ich eine Extension-Methode, um den Code zum Abrufen des Schlüssels nicht immer wieder erneut schreiben zu müssen.

public static object GetKey(this ConfigurationElement element)
{
  Type t = element.GetType();
  PropertyInfo[] props = t.GetProperties();
  foreach (PropertyInfo prop in props)
  {
    ConfigurationPropertyAttribute cpa;
    if ((cpa = prop.GetAttribute<ConfigurationPropertyAttribute>(true)) != null)
    {
      if (cpa.IsKey)
        return prop.GetValue(element, null);

    }
  }
  return null;
}

Damit sieht meine GetElementKey-Implementierung der Auflistung so aus…

...
protected override object GetElementKey(ConfigurationElement element)
{
  return element.GetKey();
}
...