繁体   English   中英

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

[英]Read Web.config settings from comma-delimited string

我正在使用硬编码值在Web.config中读取特定的AppSetting键/值对,使用下面的代码。 这有效。

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部分以在List中包含值。

我怎样才能做到这一点? 我试过x.Contains,但这不起作用(可以理解)。 我期待找到逗号分隔列表中的AppSetting键。 谢谢。

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

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
}

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM