Я имею (надо надеяться), устанавливают ConfigurationElementCollection моего собственного дизайна с электронными письмами как ключи. Теперь, что? Трудно найти на самом деле в сети. Как делают меня:
выполнить итерации через него?
Посмотрите, существует ли определенный элемент?
получить определенный элемент?
... данный:
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;
}
Крошечный аромат.
Я не совсем понимаю, что у вас за проблемы - но в принципе, если у вас есть пользовательский элемент конфигурации, вы должны быть в состоянии получить его из файла конфигурации, используя что-то вроде:
YourConfigElement config =
ConfigurationManager.GetSection("YourSectionName") as YourConfigElement ;
Как только у вас есть элемент конфигурации, вы можете делать с ним все, что захотите - вы можете реализовать все те вещи, о которых вы просили - проверить существование элемента, получить определенный элемент и т.д.
Вам также следует ознакомиться с серией статей Джона Ристы из трех частей о конфигурации .NET 2.0 на CodeProject - возможно, эти статьи помогут вам решить "проблему" конфигурации ;-)
Очень рекомендую, хорошо написано и чрезвычайно полезно!
И если вы еще не обнаружили его - на Codeplex есть отличный Configuration Section Designer, который делает визуальное проектирование конфигурационных секций и коллекций простым делом и пишет весь липкий клейкий код за вас - очень удобно!
Marc
Вам нужен собственный общий базовый класс ConfigurationElementCollection
, который реализует IList
. Затем вы можете унаследовать от этого все свои коллекции конфигураций и сократить объем работы, которую необходимо выполнить при создании коллекций конфигураций.
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);
}
}
}
Немного поработав, вы также можете получить коллекцию словарей.