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

使用Convert.ToInt32转换时出现未知FormatException异常问题排查

异常原因

FormatException抛出的核心原因是待转换的item字符串不符合32位十进制整数的解析规则,常见触发场景如下:

  • 字符串包含非数字字符:比如首尾空格、字母、特殊符号、货币符号、未适配的千位分隔符等
  • 字符串为null、空值,或仅包含空白字符
  • 字符串为二进制、八进制、十六进制格式的数值表示,但转换时没有指定对应的解析基数,默认仅支持十进制格式解析
解决方法
  1. 增加安全校验逻辑,避免程序直接中断
    优先使用int.TryParse替代Convert.ToInt32,既可以避免异常抛出,还可以对非法输入做额外处理(比如日志排查),示例代码如下:
if (model.TagSelection != null)
{
    foreach (var item in model.TagSelection)
    {
        // 空值先过滤
        if (string.IsNullOrWhiteSpace(item))
        {
            continue;
        }
        // 尝试解析,适配固定区域性格式
        if (int.TryParse(item.Trim(), NumberStyles.Integer, CultureInfo.InvariantCulture, out int tagValue))
        {
            job.Tags |= tagValue;
        }
        else
        {
            // 此处可添加日志输出item的实际值,快速定位非法输入
        }
    }
}
  1. 适配非十进制的数值格式
    如果确认item是其他进制的数值,转换时需要指定对应基数:
  • 十六进制:调用Convert.ToInt32(item, 16),或在TryParse中指定NumberStyles.HexNumber
  • 八进制:调用Convert.ToInt32(item, 8)
  • 二进制:调用Convert.ToInt32(item, 2)
  1. 适配特殊格式的数值
    如果字符串包含千位分隔符等合法的数值格式,可以调整NumberStyles参数适配,比如设置为NumberStyles.Integer | NumberStyles.AllowThousands即可解析带千位分隔符的整数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:15:03