从逗号分隔的字符串中读取 Web.config 设置

Read Web.config settings from comma-delimited string

我正在阅读 Web.config 中特定的 AppSetting key/value 对,使用硬编码值,代码如下。这行得通。

string[] filteredList = webConfigApp.AppSettings.Settings.AllKeys.AsEnumerable().Where(x => x.Equals("appMode") || x.Equals("loggingMode") || x.Equals("ticketModeCache") || x.Equals("ticketMode")).ToArray();

相反,我想从也在 Web.config 中的逗号分隔列表中读取,例如:

<add key="setConfigValues" value="appMode,loggingMode,ticketModeCache,ticketMode,twilioMode,kioskId,kioskPrinterConfig" />

我知道如何解析和创建一个 List<> 按照这些思路做一些事情...

List<string> ConfigValues = ConfigurationManager.AppSettings["setConfigValues"].Split(',').ToList();

...但我不确定如何对 Linq 部分进行编码以将值包含在列表中。

我该怎么做?我试过 x.Contains 但这不起作用(可以理解)。我正在寻找逗号分隔列表中的 AppSetting 键。谢谢

尝试使用 Select() 或 Where() 方法 例如:

List<string> ConfigValues = ConfigurationManager.AppSettings["setConfigValues"].Split(',').ToList();
ConfigValues.Select(val => val == "x");

我会将其转换为不区分大小写的字典:

var configValues = ConfigurationManager.AppSettings["setConfigValues"]
    .Split(", ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
    .Distinct()
    .ToDictionary(
        item => item,
        item => webConfigApp.AppSettings.Settings[item].Value, 
        StringComparer.InvariantCultureIgnoreCase);


if (configValues.ContainsKey("loggingMode"))
{
    // do stuff
}

if (configValues.TryGetValue("loggingMode", out string value) && value == "on")
{
    // do stuff
}

有效的解决方案比我想象的要容易得多。这适用于我想要做的事情:

string[] filteredList = ConfigurationManager.AppSettings["setConfigValues"].Split(',').ToArray();

具体来说,我正在使用 "setConfigValues" 数组的键来拉取 Web.config 值,因此将逗号分隔的字符串解析为 string[] 就足够了。

        foreach (string s in filteredList) 
        {
            keyValues.Add(new KeyValuePair<string, string>(s, webConfigApp.AppSettings.Settings[s].Value));
        }