我在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表达式添加处理?
答案 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();