.net 在配置文件中存储值的集合

.net 在配置文件中存储值的集合,.net,collections,config,.net,Collections,Config,在.NET3.5(Windows)服务中,我想在配置文件中存储一小部分值。基本上,我需要允许管理员在这个小集合中添加和删除值。我需要向配置文件中添加什么来存储小值集合,以及如何在C#中读取集合 为了澄清,我正在寻找的数据集如下: <Illegal Characters> <CustomCollection value="?"/> <CustomCollection value="#"/> <CustomCollection value=","

在.NET3.5(Windows)服务中,我想在配置文件中存储一小部分值。基本上,我需要允许管理员在这个小集合中添加和删除值。我需要向配置文件中添加什么来存储小值集合,以及如何在C#中读取集合

为了澄清,我正在寻找的数据集如下:

<Illegal Characters>
  <CustomCollection value="?"/>
  <CustomCollection value="#"/>
  <CustomCollection value=","/>
</Illegal Characters>
public object Create(object parent, object configContext, XmlNode section)
{
    IList<string> illegal = new List<string>();
    XmlNodeList processesNodes= section.SelectNodes("CustomCollection");

    foreach (XmlNode child in processesNodes)
    {
        illegal.Add(child.Attributes["value"].InnerText);
    }
    return illegal;
}

我将在VB.NET中描述该方法,因为我确信C方法在某些情况下非常相似或相同。在解决方案资源管理器中打开“我的项目”下的settings.settings文件。添加所需的设置,例如“OutputPath”。然后,在代码中,使用

variable = My.Settings.OutputPath

' If a user modifiable setting, you can use:
My.Settings.OutputPath = variable
My.Settings.Save()

如果值的数量很小,并且与它们关联的名称是固定的,则应该能够将它们存储在appSettings配置部分中,并使用.appSettings集合引用它们。这对于标准的键值对非常有效。如果您的数据比这更复杂,那么您可能需要定义自己的配置节和关联的配置节,以便将数据解析为所需的任何自定义对象。您可能还希望实现一个,以检测配置文件的更改并更新正在运行的应用程序的配置,除非可以启动/停止服务以应用新配置。

作为替代,您可以将单个非法字符字符串作为正则表达式存储在配置文件中。这样,您就不必遍历字符来检查它们是否在给定字符串中使用——您可以基于正则表达式进行比较。可能会节省一点cpu和复杂性


当然,如果管理员要直接编辑文件,那么使用单个XML节点就更容易了。但是,如果他们通过应用程序本身更改字符列表,则使用正则表达式可能会更好。

有一篇关于创建自定义配置节处理程序的文章,该处理程序将值作为列表加载

基本上,
IConfigurationSectionHandler
的创建方法应该如下所示:

<Illegal Characters>
  <CustomCollection value="?"/>
  <CustomCollection value="#"/>
  <CustomCollection value=","/>
</Illegal Characters>
public object Create(object parent, object configContext, XmlNode section)
{
    IList<string> illegal = new List<string>();
    XmlNodeList processesNodes= section.SelectNodes("CustomCollection");

    foreach (XmlNode child in processesNodes)
    {
        illegal.Add(child.Attributes["value"].InnerText);
    }
    return illegal;
}
公共对象创建(对象父对象、对象配置上下文、XmlNode部分) { IList非法=新列表(); XmlNodeList ProcessNodes=section.SelectNodes(“CustomCollection”); foreach(ProcesssNodes中的XmlNode子节点) { 非法.Add(子.Attributes[“value”].InnerText); } 退货不合法; }