C# C“自定义配置:”;条目'';已添加。”;

C# C“自定义配置:”;条目'';已添加。”;,c#,app-config,configurationmanager,C#,App Config,Configurationmanager,我做了一个小的自定义配置设置,当我尝试使用我的自定义集合时,我不断收到错误“条目“”已添加”。我的代码看起来像这样 问题来自我的标签 我看不出我遗漏了什么,因为我已经实现了相同的东西,而这一个工作得非常完美 如果有帮助的话,我的.NET版本是4.0 有问题的应用程序配置部分: <WorkersCollectionSection> <WorkersList> <Worker name="Category" isEnabled="false" ass

我做了一个小的自定义配置设置,当我尝试使用我的自定义集合时,我不断收到错误“条目“”已添加”。我的代码看起来像这样

问题来自我的标签

我看不出我遗漏了什么,因为我已经实现了相同的东西,而这一个工作得非常完美

如果有帮助的话,我的.NET版本是4.0

有问题的应用程序配置部分:

<WorkersCollectionSection>
<WorkersList>
  <Worker name="Category" isEnabled="false"
        assemblyNamespace="xxxxxx.xxxxxxxxxxxxxxx.Models.Category"
        queueName="CategorQueue"
        saveToFolder="false">
    <HandlesList>
      <Handle name="xxxxxxx" isEnabled="true"/>
      <Handle name="yyyyyyy" isEnabled="true"/>
      <Handle name="zzzzzzzzzz" isEnabled="true"/>
    </HandlesList>
  </Worker>
 <WorkersList>
<WorkersCollectionSection>
标记的代码:`public class HandleCollection:ConfigurationElementCollection,IEnumerable {


问题似乎在于,我没有在集合添加方法中进行检查,以检查我添加的元素是否具有与空元素不同的键。我将集合构造函数更改为:

 public HandleCollection()
    {
        HandleElement handle = (HandleElement)CreateNewElement();
        if (handle.Name != "")
            BaseAdd(handle);
    }

现在它似乎工作正常。

在配置的
部分中,第一个元素有两个打开的尖括号:`这是一个tipo.My bad.you在添加之前在app.config文件中注册了自定义配置部分吗
    public HandleCollection()
    {
        HandleElement handle = (HandleElement)CreateNewElement();
        BaseAdd(handle);
    }

    public override ConfigurationElementCollectionType CollectionType
    {
        get { return ConfigurationElementCollectionType.AddRemoveClearMap; }
    }

    protected override ConfigurationElement CreateNewElement()
    {
        return new HandleElement();
    }

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

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

    public new HandleElement this[string Name]
    {
        get { return (HandleElement)BaseGet(Name); }
    }

    public int IndexOf(HandleElement handle)
    {
        return BaseIndexOf(handle);
    }

    public void Add(HandleElement url)
    {
        BaseAdd(url);
    }

    protected override void BaseAdd(ConfigurationElement element)
    {
        BaseAdd(element, false);
    }

    public void Remove(HandleElement handle)
    {
        if (BaseIndexOf(handle) >= 0)
            BaseRemove(handle);
    }

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

    public void Remove(string name)
    {
        BaseRemove(name);
    }

    public void Clear()
    {
        BaseClear();
    }

    IEnumerator<ConfigurationElement> IEnumerable<ConfigurationElement>.GetEnumerator()
    {
        return (from i in Enumerable.Range(0, this.Count)
                select this[i])
            .GetEnumerator();
    }

    protected override string ElementName
    {
        get { return "Handle"; }
    }

    public static explicit operator HandleCollection(Dictionary<string, string> v)
    {
        throw new NotImplementedException();
    }

    public static explicit operator HandleCollection(ConfigurationSection v)
    {
        throw new NotImplementedException();
    }
}`
 public class HandleElement: ConfigurationElement
{
    [ConfigurationProperty("name", IsRequired = true)]
    [StringValidator(InvalidCharacters = "~!@#$%^&*()[]{}/;'\"|\\", MinLength = 0, MaxLength = 60)]
    public string Name
    {
        get { return base["name"] as string; }
        set { base["name"] = value; }
    }

    [ConfigurationProperty("isEnabled", IsRequired = true)]
    public bool IsEnabled
    {
        get { return (bool)base["isEnabled"]; }
        set { base["isEnabled"] = value; }
    }

}
 public HandleCollection()
    {
        HandleElement handle = (HandleElement)CreateNewElement();
        if (handle.Name != "")
            BaseAdd(handle);
    }