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

时间:2015-01-24 01:57:16

标签: c# string linq

我有以下代码行:

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)如果有结果但没有结果则会引发以下错误&#34; 输入字符串的格式不正确&#34;

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

或者我是否需要将结果转换为字符串,检查它是否包含内容,如果是,则解析为int的列表?

3 个答案:

答案 0 :(得分:6)

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

使用

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

在选择之前添加以下内容:

。凡(X =&GT;!string.IsNullOrEmpty(X))

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

请注意,您需要处理空案例。