.NET - 逗号将appSettings值分隔为整数列表(+句柄空值)

时间:2018-03-16 14:37:46

标签: .net string linq is-empty

我在appSettings中有以下条目:

<add key="blackListedIDs" value="" />

在代码中,我尝试将此CSV值转换为整数列表:

var blackList = ConfigurationManager.AppSettings["blackListedIDs"]
                .Split(',')
                .Select(n => int.Parse(n.Trim()))
                .ToList();

但它发现错误:

Message = "Input string was not in a correct format."

这是由于appSettings键中的空字符串值。当我用一些数据填充它时,例如<add key="blackListedIDs" value="1, 2, 3" />一切正常。如何以最简单的方式处理空字符串值内联,可能是为上面的LINQ表达式添加处理?

2 个答案:

答案 0 :(得分:4)

使用String.Split重载,允许您传递StringSplitOptions.RemoveEmptyEntries选项,例如:

var blackList = ConfigurationManager.AppSettings["blackListedIDs"]
                .Split(new[]{','},StringSplitOptions.RemoveEmptyEntries)
                .Select(n => int.Parse(n))
                .ToList();

如果输入字符串为空或空格,Split将无法返回任何内容。这也将处理前导或尾随逗号。

您不需要修剪字符串,int.Parse()可以处理前导或尾随空格。

以下代码:

var items = ",1 , 2 ,".Split(new[]{','},StringSplitOptions.RemoveEmptyEntries)
                      .Select(n => int.Parse(n))
                      .ToArray();

即使有空格,前导和尾随分隔符

,也会返回1, 2

答案 1 :(得分:2)

您可以添加过滤器以仅保留非空字符串,如下所示:

var blackList = ConfigurationManager.AppSettings["blackListedIDs"]
                .Split(',')                 
                .Where(n => !String.IsNullOrWhiteSpace(n)) // filter out empty strings                   
                .Select(n => int.Parse(n.Trim()))
                .ToList();