【问题标题】:Custom config section key自定义配置部分键
【发布时间】:2012-12-12 21:34:35
【问题描述】:

我已经实现了这样的自定义配置部分

 <directorySettings>
   <domainConfigurationList>
     <domainConfiguration id="1" name="name1" url="http://www.google.com"/>
     <domainConfiguration id="2" name="name2" url="http://www.bing.com"/>
   </domainConfigurationList>
 </directorySettings>

我只能将一个字段设置为键:

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

但我还需要不仅可以通过键“名称”进行搜索,还可以通过字段“id”进行搜索。这是我的DirectorySettingsConfigurationElementCollection的一部分:

    public DirectorySettingsConfigurationElement Get(string name)
    {
        return (DirectorySettingsConfigurationElement)BaseGet(name);
    }

    public DirectorySettingsConfigurationElement GetById(int id)
    {
        // ???
        return null;
    }

通过自定义字段(不是按键)获取我的DirectorySettingsConfigurationElement 的最佳方式是什么

【问题讨论】:

  • 迭代这组值,直到你有一个具有匹配 ID 的值。对于小型套装,这不会太贵。 (如果你想让它在更大的集合中表现更好,那么你可以使用一个哈希表,例如字典。)
  • Paul,我该如何迭代它?无法访问元素集合..
  • 解决了! ConfigurationElementCollection 有 GetEnumerator 方法 - 我可以用它来迭代
  • 你不需要调用GetEnumerator:该类型实现了IEnumerable,所以你可以使用foreachforeach (ConfigurationElement elephant in blah) { ... }.
  • 是的,在我的情况下是 foreach(var item in this) { ... }

标签: c# web-config app-config


【解决方案1】:

可能会有更直接的答案;但我通常看到的方法是使用ConfigurationElementCollection (http://msdn.microsoft.com/en-us/library/system.configuration.configurationelementcollection.aspx)

您将获得 domainConfigurations 的集合,并且您可以对其进行迭代或使用 LINQ 查询来获取匹配值。

【讨论】:

  • 是的,这实际上是我整理出来的方式,但它看起来像解决方法,但不是解决方案。无论如何 - 它对我来说很好。谢谢
猜你喜欢
  • 2010-10-25
  • 2014-03-01
  • 2010-11-12
  • 2013-09-17
  • 2011-07-04
  • 2013-09-21
  • 2011-12-10
  • 2014-01-19
相关资源
最近更新 更多