我有如下所示的配置值
add key="Screen1" value ="Admin"
add key="Screen2" value ="Log"
将来会添加新的屏幕。在 C# 中,我需要使用这些屏幕名称创建一个字符串数组。我们如何做到这一点(请记住,即使我们添加新屏幕,代码也需要工作)?
注 1:我正在寻找一种不使用自定义配置的方法。
注意 2:我将拥有最多 10 个名称以“屏幕”开头的配置项。但我将有 10,000 个其他配置项。
参考
我有如下所示的配置值
add key="Screen1" value ="Admin"
add key="Screen2" value ="Log"
将来会添加新的屏幕。在 C# 中,我需要使用这些屏幕名称创建一个字符串数组。我们如何做到这一点(请记住,即使我们添加新屏幕,代码也需要工作)?
注 1:我正在寻找一种不使用自定义配置的方法。
注意 2:我将拥有最多 10 个名称以“屏幕”开头的配置项。但我将有 10,000 个其他配置项。
参考
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”,它不会拾取最后一个。如果您计划进行大量此类设置,则每次添加或删除设置时“移动”所有数字将变得非常不方便。
我不完全确定是否理解这个问题,但您可以枚举设置并选择所有以“屏幕”开头的设置。