我(希望)设置我自己设计的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;
}
微小气味。
答案 0 :(得分:8)
您想要的是您自己的通用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);
}
}
}
通过更多的工作,你也可以收集字典。
答案 1 :(得分:2)
我不完全理解您的问题是什么 - 但基本上,如果您有自定义配置元素,您应该能够使用以下内容从配置文件中检索它:
YourConfigElement config =
ConfigurationManager.GetSection("YourSectionName") as YourConfigElement ;
一旦你有了你的配置元素,你可以随心所欲地做任何事情 - 你可以实现你要求的所有东西 - 检查一个元素的存在,获得一个特定的元素等。
您还应该查看Jon Rista关于CodeProject上.NET 2.0配置的三部分系列以获取更多信息 - 也许这些文章将帮助您解锁配置“挑战”; - )
强烈推荐,写得很好,非常有帮助!
如果你还没有发现它 - 在Codeplex上有一个很好的Configuration Section Designer,可以直观地设计配置部分和集合,并为你编写所有粘性代码 - 非常方便!
马克