You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C# Linq中处理空字符串引发的System.FormatException异常

处理Linq中空字符串场景的解析异常问题

这个问题的核心原因很明确:当result是空字符串时,Split(',')方法并不会返回空数组,而是会生成一个包含单个空字符串的数组。这时候long.Parse("")自然会抛出System.FormatException,因为空字符串无法被解析为长整型。

下面给你几个不同场景下的解决方案,按需选择:

方案1:健壮处理所有无效输入(推荐)

如果不仅要处理空字符串,还要兼容其他可能的无效格式(比如非数字字符串、带空格的字符串),可以结合long.TryParse和Linq的筛选逻辑,只保留能成功解析的数值:

string result = "";
long[] ItemsToSkip = result.Split(',')
    // 先过滤掉空/空白字符串,减少无效解析尝试
    .Where(x => !string.IsNullOrWhiteSpace(x))
    // 尝试解析每个元素,只保留成功的结果
    .Select(x => (IsValid: long.TryParse(x.Trim(), out long num), Value: num))
    .Where(x => x.IsValid)
    .Select(x => x.Value)
    .ToArray();

这种方式的优势是容错性极强,不管是result为空、还是包含"1,,3"、" 5 , abc "这类混合内容,都能正确提取出有效的长整型数值,最终数组里只会有合法数据。

方案2:仅处理result为空的情况

如果你的场景中result要么是空字符串,要么是完全合法的逗号分隔数字(不会出现中间空元素或无效格式),可以直接先判断result状态:

string result = "";
long[] ItemsToSkip = string.IsNullOrWhiteSpace(result)
    ? Array.Empty<long>()
    : result.Split(',')
        .Select(x => long.Parse(x))
        .ToArray();

这个方案代码更简洁,但只覆盖了result为空的边界场景,对其他无效输入依然会抛出异常。

方案3:自定义解析逻辑(灵活控制无效值)

如果你需要对无效值(比如空字符串、无法解析的内容)设置默认值,而不是直接过滤,可以这样写:

string result = "";
long[] ItemsToSkip = result.Split(',')
    .Select(x => {
        // 尝试解析,失败则返回默认值(比如0,根据你的业务需求调整)
        return long.TryParse(x.Trim(), out long num) ? num : 0;
    })
    .ToArray();

这种方式会保留所有拆分后的元素数量,无效元素会被替换为你指定的默认值。

内容的提问来源于stack exchange,提问作者OneoFtheBest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 01:08:13