Получение элемента конфигурации из ConfigurationElementCollection

Я (надеюсь) настроил ConfigurationElementCollection моего собственного дизайна с электронными письмами в качестве ключей. Что теперь? Трудно найти на самом деле в Интернете. Как я:

  1. перебрать это?

  2. Видите, существует ли конкретный элемент?

  3. получить конкретный элемент?

...дано:

    YourConfigElement config = 
   ConfigurationManager.GetSection("YourSectionName") as YourConfigElement;

Частичный ответ

1.

 foreach (X x in config.XCollection) 
             <code here>

2 заменить "код здесь" на

 { 
    if (x.Y == needle) 
    {
       hasIndeed = true;
       break;
    }
 }

3 заменить "код здесь" на

 { if (x.Y == needle) 
       cameUpWith = x;
       break;
 }

Крошечный запах.

2 ответа

То, что вы хотите, это ваш собственный общий ConfigurationElementCollection базовый класс, который реализует IList<T>, Затем вы можете унаследовать это для всех своих коллекций конфигурации и сократить объем работы, которую необходимо выполнить при создании коллекций конфигурации.

public abstract class BaseConfigurationElementCollection<TConfigurationElementType> : ConfigurationElementCollection, IList<TConfigurationElementType> where TConfigurationElementType : ConfigurationElement, IConfigurationElementCollectionElement, new()
{
    protected override ConfigurationElement CreateNewElement()
    {
        return new TConfigurationElementType();
    }

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

    public IEnumerator<TConfigurationElement> GetEnumerator()
    {
        foreach (TConfigurationElement type in this)
        {
            yield return type;
        }
    }

    public void Add(TConfigurationElementType configurationElement)
    {
        BaseAdd(configurationElement, true);
    }

    public void Clear()
    {
        BaseClear();
    }

    public bool Contains(TConfigurationElementType configurationElement)
    {
        return !(IndexOf(configurationElement) < 0);
    }

    public void CopyTo(TConfigurationElementType[] array, int arrayIndex)
    {
        base.CopyTo(array, arrayIndex);
    }

    public bool Remove(TConfigurationElementType configurationElement)
    {
        BaseRemove(GetElementKey(configurationElement));

        return true;
    }

    bool ICollection<TConfigurationElementType>.IsReadOnly
    {
        get { return IsReadOnly(); }
    }

    public int IndexOf(TConfigurationElementType configurationElement)
    {
        return BaseIndexOf(configurationElement);
    }

    public void Insert(int index, TConfigurationElementType configurationElement)
    {
        BaseAdd(index, configurationElement);
    }

    public void RemoveAt(int index)
    {
        BaseRemoveAt(index);
    }

    public TConfigurationElementType this[int index]
    {
        get
        {
            return (TConfigurationElementType)BaseGet(index);
        }
        set
        {
            if (BaseGet(index) != null)
            {
                BaseRemoveAt(index);
            }
            BaseAdd(index, value);
        }
    }
}

Приложив немного больше работы, вы также можете получить коллекцию словарей.

Я не совсем понимаю, какие у вас проблемы - но в принципе, если у вас есть пользовательский элемент конфигурации, вы сможете извлечь его из файла конфигурации, используя что-то вроде:

YourConfigElement config = 
    ConfigurationManager.GetSection("YourSectionName") as YourConfigElement ;

Если у вас есть элемент конфигурации, вы можете делать с ним все, что захотите - вы можете реализовать все, что вы просили - проверить наличие элемента, получить определенный элемент и т. Д.

Вам также следует ознакомиться с серией из трех статей о настройке.NET 2.0 в CodeProject Джона Риста, чтобы узнать больше - возможно, эти статьи помогут вам разблокировать ваш вызов "config";-)

Настоятельно рекомендуется, хорошо написано и очень полезно!

И если вы еще этого не обнаружили - в Codeplex есть отличный дизайнер разделов конфигурации, который делает визуальное проектирование разделов и коллекций конфигурации проще простого и пишет для вас весь клейкий клейкий код - очень удобно!

Марк

Другие вопросы по тегам