我已经在这里回答了答案,但我的问题似乎与其他人报告的Null回报有所不同。
我正在尝试从app.config中获取一个部分,以便我可以对每个名称/值对进行一些处理。由于投射问题,我似乎无法从ConfigurationManager获得回合。
使用C#和.NET 4.5,我一直在尝试这个主题的变体:
AppSettingsSection sec =
(AppSettingsSection)ConfigurationManager.GetSection("appSettings");
我首先尝试将值拉回到泛型中,并使用预期的转换错误来定义传入集合的类型。但是,我尝试使用的每种类型都会出现相同的错误,无法将abc
类型转换为abc
(相同类型)。
显然问题出在椅子和键盘之间,但Google没有帮助。有什么想法吗?
以下是app.config的剪辑
<add key="TemplatePath" value="c:\temp\templates\"/>
<add key="deployDateToken" value="[deployDate]"/>
<add key="NavigateToFolderToken" value="[NavigateToFolder]"/>
<add key="contactToken" value="[ContactInfo]"/>
答案 0 :(得分:1)
你可以这样说:
public static IEnumerable<KeyValuePair<string,string>> EnumerateAppSettings()
{
return ConfigurationManager
.AppSettings
.Cast<string>()
.Select( key => new KeyValuePair<string,string>( key , ConfigurationManager.AppSettings[key] ) )
;
}
...
foreach ( KeyValuePair<string,string> item in EnumerateAppSettings() )
{
// do something
}
甚至
Dictionary<string,string> appSettings = ConfigurationManager
.AppSettings
.Cast<string>()
.ToDictionary( key => key , key => ConfigurationManager.AppSettings[key] )
;
或者......最简单的:
NameValueCollection appSettings = ConfigurationManager.AppSettings ;
如果您想获得实际的AppSettingsSection
,则需要this answer查看问题How to get web.config appSettings as ConfigurationSection not NameValueCollection。
答案 1 :(得分:0)
如下所示
var appSettings = ConfigurationManager.AppSettings;
foreach (var key in appSettings.AllKeys)
{
appSettings[key]//do something
}