繁体   English   中英

空数组上的C#Linq .Select(int.parse)导致“输入字符串格式不正确”

[英]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.

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