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