[英]C# Linq .Select(int.parse) on empty array results in “Input string was not in a correct format”
我有以下代码行:
List<int> _people = code.data.loadScalarDataPoint(code.enums.pathNames.Department, "Department_Staff", RecId).Split('|').Select(int.Parse).ToList();
静态方法loadScalarDataPoint
返回给定输入的所选列的字符串。
在这种情况下,它将返回由管道分隔的整数的列表(例如12|45|88|1543|123
),或者如果该列为NULL
,则将返回一个空字符串。
如果有结果,则使用linq Select(int.Parse)
起作用,但是如果没有结果,则抛出以下错误“ 输入字符串的格式不正确 ”
我知道为什么,因为您无法将空字符串解析为int
,但是在单行代码中是否有方法可以对此进行检查?
还是我需要将结果放入字符串中,检查其是否包含内容,以及是否解析为int
列表?
带有完整说明的EDIT:在失败的情况下, loadScalarDataPoint
方法返回一个空字符串,对Split(',')
的调用返回一个IEnumerable<String>
,其中包含一个空字符串。 对Select(Int32.Parse)
的调用将引发异常,因为空字符串的格式不正确。
采用
.Split(new [] {'|'}, StringSplitOptions.RemoveEmptyEntries)
为什么不先检查非空结果?
List<int> _people = code.data.loadScalarDataPoint(code.enums.pathNames.Department, "Department_Staff", RecId).Split('|').Where(a => a.Any()).Select(int.Parse).ToList();
在选择之前添加以下内容:
哪里(x =>!string.IsNullOrEmpty(x))
这基本上可以确保在执行选择时仅包含具有字符串值的元素。
请注意,您将需要处理空箱。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.