我有以下代码行:
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
的列表?
答案 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时只有元素具有字符串值。
请注意,您需要处理空案例。