如何从winform app.config中获取一个部分?

时间:2014-05-13 22:50:55

标签: c# winforms casting config appsettings

我已经在这里回答了答案,但我的问题似乎与其他人报告的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]"/>

2 个答案:

答案 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
}