-1

我有如下所示的配置值

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

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

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

注意 2:我将拥有最多 10 个名称以“屏幕”开头的配置项。但我将有 10,000 个其他配置项。

参考

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

3 回答 3

3
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”,它不会拾取最后一个。如果您计划进行大量此类设置,则每次添加或删除设置时“移动”所有数字将变得非常不方便。

于 2012-08-02T15:31:07.653 回答
2

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

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

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

于 2012-08-02T14:54:36.670 回答
0

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

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

于 2012-08-02T15:45:16.480 回答