C# Linq .Select(int.parse) 在空数组上导致 "Input string was not in a correct format"

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 return 是给定输入的选定列的字符串。

在这种情况下,它 return 是一个管道分隔的整数列表(例如 12|45|88|1543|123),或者如果该列是 NULL 它将 return 一个空字符串。

如果有结果,则使用 linq Select(int.Parse) 可以工作,但如果没有结果,则会引发以下错误“输入字符串的格式不正确

我知道为什么,因为您无法将空字符串解析为 int,但是有没有办法在单行代码中检查这一点?

或者我是否需要将结果放入字符串中,检查它是否有内容,如果有则解析为 int 的列表?

编辑并提供完整解释:在您失败的情况下,loadScalarDataPoint 方法 returns 一个空字符串,调用 Split(',') returns 一个 IEnumerable<String> 其中有一个空字符串。调用 Select(Int32.Parse) 会引发异常,因为空字符串的格式不正确。

使用

.Split(new [] {'|'}, StringSplitOptions.RemoveEmptyEntries)

在select之前添加以下内容:

.哪里(x=>!string.IsNullOrEmpty(x))

这基本上确保了在执行 select 时只有具有字符串值的元素。

请注意,您需要处理空箱子。

为什么不先检查非空结果?

List<int> _people = code.data.loadScalarDataPoint(code.enums.pathNames.Department, "Department_Staff", RecId).Split('|').Where(a => a.Any()).Select(int.Parse).ToList();