用于从配置文件创建数组的可扩展C#代码

我有配置值,如下所示

add key="Screen1" value ="Admin" add key="Screen2" value ="Log" 

将来会增加新的屏幕。 在C#中,我需要创建一个包含这些屏幕名称的字符串数组。 我们怎么做呢(请记住,即使我们添加新屏幕,代码也需要工作)?

注1:我正在寻找一种使用自定义配置的方法。

注2:我最多有10个配置项,名称以“Screen”开头。 但我会有10,000个其他配置项。

参考

  1. 用于检查价值存在的更好的代码/模式
  2. 读取配置节的通用方法
  3. 在C#中生成数字列表
  4. 检测给定列表中至少3个序列号的序列
  5. LINQ是否缓存计算值?
  6. 有一种简单的方法可以在C#中组合两个相对路径吗?

 ConfigurationManager.AppSettings.AllKeys .Where( key => key.StartsWith( "Screen" ) ) .Select( key => ConfigurationManager.AppSettings[key] ) 

如果您有很多设置(例如,10K,就像在评论中指定的那样),您可能会受益于AppSettings集合针对按键查找进行了优化的事实。 为此,您将不得不重复尝试“Screen1”,“Screen2”,“Screen3”等,并在没有找到值时停止:

 Enumerable.Range( 1, int.MaxValue ) .Select( i => ConfigurationManager.AppSettings[ "Screen" + i ] ) .TakeWhile( value => value != null ) 

然而,这种方法正是Knuth先生警告我们的那种“过早优化”。 配置文件不应包含那么多设置,句点。

另一个缺点:请记住,此方法假定“屏幕*”设置的编号没有间隙。 也就是说,如果你有“Screen1”,“Screen2”和“Screen4”,它将不会拾取最后一个。 如果您计划进行大量这些设置,则每次添加或删除设置时“移动”所有数字都会非常不方便。

按照此问题的答案中的说明创建您自己的配置部分。

通过这样做,您可以完全控制配置文件中的内容以及它如何暴露给应用程序。

另请参阅如何:在MSDN上使用ConfigurationSection创建自定义配置节以获得分步教程。

我不完全确定是否理解这个问题,但你可以枚举设置并选择以“屏幕”开头的所有内容。

看看.NET应用程序中的枚举设置 。