应使用 int.TryParse 而非 int.Parse 处理不可信输入,因后者抛 FormatException、OverflowException 等异常导致程序崩溃,而 TryParse 通过 bool 返回值和 out 参数安全解析,支持空值、空白、自定义格式,并具备更好性能与稳定性。

别用 int.Parse 处理不可信输入——它会直接炸掉程序。
遇到 FormatException 或 OverflowException 怎么办
这是 int.Parse 最常见的翻车现场:用户输了个空格、字母、超大数字,或者只是多敲了个逗号,int.Parse 就抛 FormatException;输个 "2147483648"(比 int.MaxValue 大 1),就抛 OverflowException。它不判断,只硬转。
- 永远别在 Web 表单、配置文件读取、日志解析等场景直接调
int.Parse - 如果必须用,务必包
try/catch,且只捕获FormatException和OverflowException,别吞掉其他异常 -
int.Parse(null)会抛ArgumentNullException,空字符串""也是FormatException
int.TryParse 才是日常主力
int.TryParse 不抛异常,靠返回 bool 告诉你成没成,把结果塞进 out 参数里。性能更好,逻辑更稳。
- 写法固定:
if (int.TryParse(input, out int value)) { /* 成功,value 可用 */ } - 输入为
null、空串、含空白(如" 123 ")都能正确处理——默认会 Trim,除非你传了NumberStyles.None - 支持自定义格式,比如允许货币符号:
int.TryParse("$123", NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"), out value) - 注意:
int.TryParse("123abc", out var x)返回false,但x的值是未定义的(实际为 0),别假设它保持原值
需要默认值或转换失败兜底时怎么写
业务里常要“转不成就给 0”或“转不成就用配置里的默认值”,别手写 try/catch 套壳。
- 最简兜底:
int.TryParse(input, out int value) ? value : 0 - 避免重复解析(比如先判再转):
int value = int.TryParse(input, out int v) ? v : defaultValue; - 如果输入可能为
null且你想统一处理,先做空检查:string.IsNullOrWhiteSpace(input) ? defaultValue : ... - 别用
Convert.ToInt32(input)替代——它底层还是调int.Parse,该崩一样崩
真正难的不是“怎么转”,而是想清楚:这个字符串从哪来?谁控制它的格式?有没有并发修改?要不要考虑文化差异(比如德国用逗号当小数点)?这些才是决定用 TryParse 还是加校验、加日志、甚至换数据协议的关键。










