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();
我有下面一行代码:
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();