sir*_*ank 5 c# linq configuration configurationmanager
我有一个有效的自定义配置部分。但是,通过 a 获取我的数据很痛苦,ConfigurationElementCollection但是当我尝试将我的属性实现为 IEnumerable 时,它失败并显示错误:
ConfigurationErrorsException 未处理“属性 'contacts' 不是 ConfigurationElement。”
这是导致失败的代码:
[ConfigurationProperty("contacts", IsDefaultCollection = false)]
public IEnumerable<string> Contacts
{
get { return ((ContactCollection)base["contacts"]).Cast<ContactElement>().Select(x => x.Address); }
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我将其更改为:
[ConfigurationProperty("contacts", IsDefaultCollection = false)]
public ContactCollection Contacts
{
get { return ((ContactCollection)base["contacts"]); }
}
Run Code Online (Sandbox Code Playgroud)
一切正常。这个答案听起来像是微软决定不允许的东西,所以我不能拥有除ConfigurationElement. 真的是这样吗?如何将我的财产实施为IEnumerable<string>?
以防万一,我正在尝试存储电子邮件,并且我希望每个电子邮件都有一个元素,因为可能有很多电子邮件,我们可能希望将来存储有关每个联系人的更多信息,我认为单个以逗号分隔的列表可能会变得丑陋。例如,类似于:
<emergency>
<contact address="sirdank@stackoverflow.com" />
<contact address="jon.skeet@stackoverflow.com" />
</emergency>
Run Code Online (Sandbox Code Playgroud)
或者
<emergency>
<contact>sirdank@stackoverflow.com</contact>
<contact>jon.skeet@stackoverflow.com</contact>
</emergency>
Run Code Online (Sandbox Code Playgroud)
谢谢!
提供两种方法有什么坏处吗?第一个满足 Microsoft 要求,第二个满足您自己的要求。
public IEnumerable<string> Contacts
{
get
{
return ContactCollection.Cast<ContactElement>().Select(x => x.Address);
}
}
[ConfigurationProperty("contacts", IsDefaultCollection = false)]
public ContactCollection ContactCollection
{
get { return ((ContactCollection)base["contacts"]); }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1241 次 |
| 最近记录: |